データ構造(C言語バージョン)---線形テーブルチェーンストレージ表現

1.単一リンクリスト:線形リストのチェーンストレージ。

1)機能:任意のストレージユニットのセットを使用してデータ要素を格納し(ストレージユニットは連続的または不連続にすることができます)、論理的に隣接する要素のストレージ位置は必ずしも隣接していません。

2)ノードには2つのフィールドが含まれます。データフィールド(データ要素情報を格納)とポインターフィールド(直接の後続ストレージの場所を格納)です。

3)ポインターまたはチェーン:ポインターフィールドに格納されている情報。

2.ヘッドポインター:リンクリストの最初のノードの格納場所リンクリスト全体へのアクセスは、ヘッドポインターから開始する必要があります。

3.ヘッドノード:単一リンクリストの最初のノードの前にノードが接続され、そのデータフィールドには情報が格納されない場合がありますが、追加情報が格納される場合があります。ポインターフィールドが空の場合、線形テーブルは空のテーブルです。

      ヘッドノードを導入する利点:

      1)リンクリストの最初の位置での操作を、リストの他の位置での操作と一致させます。

      2)空のテーブルと空でないテーブルの処理は一貫しています。

4.単一リンクリストのノードのタイプ

typedef struct LNode {
 int data;
 struct LNode * next;
} LNode、*リンクリスト;

5.
 単一リンクリストLNode * s、* p、* q;
 Linklist L;
 int i、temp;
 1)ノードのコードフラグメントを挿入します。
 p = GetElem(L、i-1);
 s-> next = p-> next;
 p-> next = s;
 2)* sノードを* pの前のコードフラグメントに挿入すると、時間の複雑さはO( 1)。
 s-> next = p-> next;
 p-> next = s;
 temp = p-> data;
 p-> data = s-> data;
 s-> data = temp;
 3)ノードのコードフラグメントを削除し、 、時間の複雑さはO(n)です。
 p = GetElem(L、i-1);
 q = p-> next;
 p-> next = q-> next;
 free(q);
 4)ノードを削除* p、時間の複雑さはO(1)。
 q = p->次;
 p->データ= p->次- >データ;
 p->次= q->次;
 フリー(q);

6.ヘッド挿入メソッドを使用して単一リンクリストを確立し、テーブルの末尾からテーブルのヘッドに逆方向に単一リンクリストLを確立し、毎回ヘッドノードの後に​​要素を挿入します。時間の複雑さはO(n)です。
Linklist list_headinsert(Linklist&L)
{
 LNode * s;
 int x;
 L =(Linklist)malloc(sizeof(LNode));
 L-> data = NULL;
 scanf( "%d"、&x);
 while(x!= 9999 )
 {
  s =(LNode *)malloc(sizeof(LNode));
  s-> data = x;
  s-> next = L-> next;
  L-> next = s;
  scanf( "%d"、&x);
 }
 return L;
}
7.末尾補間を使用して、単一リンクリストを作成します。テーブルの最後からテーブルの先頭まで、単一リンクリストが順方向に確立されます。毎回、要素がテーブルの最後に挿入され、時間の複雑度はO(n)です。
Linklist List_tailinsert(Linklist&L)
{
 int x;
 L =(Linklist)malloc(sizeof(LNode));
 LNode * s、* r = L; // rはテーブルの終わりのポインターです。
 scanf( "%d"、&x);


  s =(LNode *)malloc(sizeof(LNode));
  s-> data = x;
  r-> next = s;
  r = s;
  scanf( "%d"、&x);
 }
 r-> next = NULL;
 return L;
}
8.シリアル番号に従ってノードの値を検索し、一重リンクリストLのi番目の位置にあるノードポインターを取り出します。時間の複雑さはO(n)です。
LNode * GetElem(Linklist L、int i)
{
 int j = 1;
 LNode * p = L-> next;
 if(i == 0)
 {
  return L;
 }
 if(i <1)
 {
  return NULL;
 }
 while( p && j <i)
 {
  p = p-> next;
  j ++;
 }
 return p;
}
9.単一リンクリストLでデータフィールド値のノードポインターを見つけ、eに等しいL、時間の複雑さはO(n )。
LNode * LocateElem(リンクリストL、int e)
{
 LNode * p = L-> next;
 while(p!= NULL && p-> data!= e)
 {
  p = p-> next;
 }
 pを返します。
}

10.テーブルの長さを見つけ、時間の複雑さはO(n)です。
int listlength(LNode * p)
{
 int len = 0;
 while(p-> next!= NULL)
 {
  len ++;
  p = p-> next;
 }
 return len;
}

11.循環単一リンクリスト:テーブルの最後のノードのポインターは、ヘッドノードを指します。

1)空の状態の判定:ヘッドノードのポインタがヘッドポインタを指している。

2)テーブルの最後で動作するようにヘッドポインターを設定します。時間の複雑さはO(n)です。

3)テールポインターをテーブルのテールとヘッドで動作するように設定します。時間の複雑さはO(1)です。

12.二重リンクリストノードには2つのポインターフィールドが含まれ、1つは先行ノードを指し、もう1つは後続ノードを指します。

13.二重リンクリストノードタイプ
typedef struct DNode {
 int data;
 struct DNode * previous、* next;
} DNode、* DLinklist;

14.二重リンクリスト

 DNode * m、* k;
 1)O(1)の時間複雑度を持つ操作セグメントを挿入します。
 m->次= k->次; k->次-
 >前= m;
 m->前= k;
 k->次= m;
 2)操作セグメントを削除します。時間の複雑さはO(1)です。
 m->次= k->次; k->次-
 >前= m;
 自由(k);

15.静的リンクリスト:配列を使用して、線形テーブルのチェーンストレージ構造を記述します。ポインターは、ノードの相対アドレス(配列添え字)であり、カーソルとも呼ばれます。

16.静的リンクリストの構造タイプ

#define maxsize 50
typedef struct {
 int data;
 int next;
} slinklist [maxsize];

おすすめ

転載: www.cnblogs.com/xqy1874/p/12721139.html
おすすめ