第3章:4。循環リンクリストと二重リンクリスト

この記事は、著者のCheng Jie氏のおかげで、「Dahuaデータ構造」に言及しています。

1つ:循環リンクリスト:
単一リンクリスト内のターミナルノードのポインター端をnullポインターからヘッドノードを指すように変更します。これにより、単一リンクリスト全体がリングを形成します。
この種の単一リンクリストは、単一の循環リンクリスト、単一のリンクリストと略されます。循環リンクリスト(循環リンクリスト)。

イラスト:
ここに画像の説明を挿入
2つ:次の2つの単一の循環リンクリストを組み合わせます。

ここに画像の説明を挿入
プロセスは次のとおりです。

p = rearA->next;					// 保存A表的头结点,即① 
rearA->next = rearB->next->next;	//将本是指向B表的第一个节点(不是头结点),赋值给 rearA->next,即② 
rearB->next = p;					//将原A表的头结点赋值给 rearB->next,即③ 

free(p);							//释放p

3:二重リンクリスト:
単一リンクリストの各ノードで、その先行ノードへのポインターを設定します。したがって、二重リンクリスト内のノードには、2つのポインタフィールドがあります
。1つは直前の後続ノードへ、もう1つは直前の先行フィールドへのポインタです。

/*线性表的双向链表存储结构*/
typedef struct DulNode
{
    
    
		ElemType data;
		struct DuLNode *prior;    	/*直接前驱指针*/
		struct DuLNode *next;		/*直接后继指针*/
} DulNode, *DuLinkList;

4:空でないサイクルの主要ノードの双方向リンクリストは次のとおりです。
ここに画像の説明を挿入
人生と同じように、楽しみたい場合は一生懸命努力し、収穫したい場合は代金を支払う必要があります。 。
二重リンクリストは、単一リンクリストよりも逆トラバーサルルックアップなどのデータ構造が多いため、いくらかの代償を払う
必要があります挿入および削除するときは、2つのポインタ変数を変更する必要があります。

5:二重リンクリストの
挿入挿入操作は複雑ではありませんが、順序は非常に重要であり、間違ってはなりません。

ストレージ要素eのノードがsであるとすると、ノードpとp-> nextの間にノードsを挿入するには、次の手順が必要です。
ここに画像の説明を挿入

合計で4つのステップがあります。

s->prior 		= p;		//把p赋值给s的前驱,如图中1
s->next 		= p->next;	//把p->next赋值给s的后继,如图中2
p->next->prior 	= s;		//把s赋值给p->next的前驱,如图中3
p-next 			= s;		//把s赋值给p的后继,如图中4

テクニック1:割り当ての順序(両腕伸縮方式)
1。左腕を
拡張します; 2。右腕を拡張します;
3。右腕を収縮します;
4。左腕を収縮します;それは
ちょうどの4つの矢印に対応します上の図。

ヒント2:各ステップの割り当て(矢印を参照)
A ------------------------------------- ----------------------------> B
Aの先行/後続(矢印がAから始まる場所によって異なります)= B(直接書き込みノードの識別);

6:二重リンクリストの
削除ノードpを削除するには、次の2つの手順のみが必要です。
ここに画像の説明を挿入
合計で3つの手順があります。

p->prior->next = p->next;	//把p->next赋值给p->prior的后继,如图1
p->next->prior = p->prior;	//把p->prior赋值给p->next的前驱,如图2

free(p);					//释放节点p

注:
1。削除の順序は上から下(矢印)です
。2。テクニック2は削除にも適用できます。

おすすめ

転載: blog.csdn.net/yanghangwww/article/details/110305261