この記事は、著者の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は削除にも適用できます。