언어/C#
片方向リスト(かたほうこう)
안녕도라
2025. 5. 22. 13:25
方方向リストの定義
以下の操作をおこなえるデータ構造です
リストの先頭、末尾(まつび)に要素を追加・削除(さくじょ)する | O(1) | |
リストの特定の位置に定数個の要素を追加・削除する | 개수가 고정(3개 추가 등) |
O(N) |
リストの特定の位置にK個の要素を追加・削除する | 개수가 입력에 따라 달라짐(개수의 절반 등) | O(N+K) |
リストの特定の位置の要素を参照する | O(N) |
方方向リストの作成
value | 要素を保持する配列 | 先頭と、末尾の要素の値 = -1で初期化 |
next_ptr | 次のノードのインデックスを保持する配列 | 先頭の要素の値=1023, 末尾の要素の値= -1で初期化 |
back | 末尾の1つ前の要素のインデックスを保持する変数 | 0で初期化 |
empty_min_idx | valueに要素が入っていない最も小さいインデックスを保持する変数 | 1で初期化 |
ソースコード
using System;
class Program
{
static void Main()
{
int n = int.Parse(Console.ReadLine());
int[] value = new int[1024];
int[] next_ptr = new int[1024];
int empty_min_idx = 1;
int back = 0;
const int start_ptr = 0;
const int end_ptr = 1023;
value[start_ptr] = -1;
value[end_ptr] = -1;
next_ptr[start_ptr] = end_ptr;
next_ptr[end_ptr] = -1;
for(int i = 0; i < n; i++){
int a = int.Parse(Console.ReadLine());
value[i] = a;
}
for(int i = 0; i < n; i++){
Console.WriteLine(value[i]);
}
}
}