This commit is contained in:
krahets
2025-12-31 19:37:45 +08:00
parent 29ec0c699d
commit 3c9d5689c4
279 changed files with 40895 additions and 16087 deletions
@@ -136,15 +136,6 @@ comments: true
```
=== "Zig"
```zig title="list.zig"
// リストを初期化
var nums = std.ArrayList(i32).init(std.heap.page_allocator);
defer nums.deinit();
try nums.appendSlice(&[_]i32{ 1, 3, 2, 5, 4 });
```
### 2.   要素へのアクセス
リストは本質的に配列であるため、$O(1)$時間で要素にアクセスし更新することができ、非常に効率的です。
@@ -260,16 +251,6 @@ comments: true
```
=== "Zig"
```zig title="list.zig"
// 要素にアクセス
var num = nums.items[1]; // インデックス1の要素にアクセス
// 要素を更新
nums.items[1] = 0; // インデックス1の要素を0に更新
```
### 3.   要素の挿入と削除
配列と比較して、リストは要素の追加と削除においてより柔軟性を提供します。リストの末尾への要素追加は$O(1)$操作ですが、リストの他の場所での要素の挿入と削除の効率は配列と同じままで、時間計算量は$O(n)$です。
@@ -486,26 +467,6 @@ comments: true
```
=== "Zig"
```zig title="list.zig"
// リストをクリア
nums.clearRetainingCapacity();
// 末尾に要素を追加
try nums.append(1);
try nums.append(3);
try nums.append(2);
try nums.append(5);
try nums.append(4);
// 中間に要素を挿入
try nums.insert(3, 6); // インデックス3に数値6を挿入
// 要素を削除
_ = nums.orderedRemove(3); // インデックス3の要素を削除
```
### 4.   リストの反復
配列と同様に、リストはインデックスを使用して反復することも、各要素を直接反復することもできます。
@@ -678,23 +639,6 @@ comments: true
```
=== "Zig"
```zig title="list.zig"
// インデックスでリストを反復
var count: i32 = 0;
var i: i32 = 0;
while (i < nums.items.len) : (i += 1) {
count += nums[i];
}
// リスト要素を直接反復
count = 0;
for (nums.items) |num| {
count += num;
}
```
### 5. &nbsp; リストの連結
新しいリスト`nums1`が与えられたとき、それを元のリストの末尾に追加できます。
@@ -792,16 +736,6 @@ comments: true
```
=== "Zig"
```zig title="list.zig"
// 2つのリストを連結
var nums1 = std.ArrayList(i32).init(std.heap.page_allocator);
defer nums1.deinit();
try nums1.appendSlice(&[_]i32{ 6, 8, 7, 10, 9 });
try nums.insertSlice(nums.items.len, nums1.items); // nums1をnumsの末尾に連結
```
### 6. &nbsp; リストのソート
リストがソートされると、「二分探索」や「双ポインタ」アルゴリズムなど、配列関連のアルゴリズム問題でよく使用されるアルゴリズムを使用できます。
@@ -888,13 +822,6 @@ comments: true
```
=== "Zig"
```zig title="list.zig"
// リストをソート
std.sort.sort(i32, nums.items, {}, comptime std.sort.asc(i32));
```
## 4.3.2 &nbsp; リストの実装
多くのプログラミング言語には、Java、C++、Pythonなどを含む組み込みリストが付属しています。それらの実装は、初期容量や拡張係数などの様々なパラメータを慎重に考慮した設定で、複雑になりがちです。興味のある読者は、さらなる学習のためにソースコードを調べることができます。
@@ -1262,9 +1189,3 @@ comments: true
```ruby title="my_list.rb"
[class]{MyList}-[func]{}
```
=== "Zig"
```zig title="my_list.zig"
[class]{MyList}-[func]{}
```