1、双方向循環リスト
二重ノードごとに単一のリストにリストを連結し、その前駆体は、カートンノードポインタフィールドが設けられています。二重リンクリストは、効果的に時間のためのスペースを使用して、アルゴリズムの時のパフォーマンスを向上させることができます。
typedefのストラクトノード { elemTypeデータを、 ストラクト前*ノード; // 即時先行ポインタが ストラクトノード*次の; // 即時後継ポインタ }ノード、* CLinkList。
図2に示すように、二重リンクリストオーダー:(注)
S->次= P; S - >前= P-> 前; P - > prior->次= S。 P - >前= S;
削除ノード:
P-> prior->次= P-> 次。 P - >ネクスト>前= P-> 前。 無料(P);
3、例:
する#include <stdio.hに> する#include <STDLIB.H> の#define OK 1つ の#define ERROR 0 のtypedef チャーElemType。 typedef int型の ステータス。 typedefは構造体DualNode { ElemTypeデータ。構造体 DualNodeは* 前。 構造体 DualNodeは、* 次の; } DualNode、 * DuLinkList。 ステータスInitList(DuLinkList * L) { DualNode * P * Q。 int型私は、* L =(DuLinkList)はmalloc(はsizeof (DualNode))。 もし(!(* L)) { 戻りERROR; } ( * L) - >前=(L *) - >次= NULL; P =(* L)。 以下のために(私は= 0 ; I < 26 ; I ++ ) { Q =(DualNode *)はmalloc(はsizeof (DualNode))。 もし(!Q) { 戻りERROR; } Q - >データ= ' A ' + I。 Q - >前=P; Q - >次= P-> 次。 P - >次= Q。 P = Q。 } P - >次=(L *) - > 次。 ( L *) - >ネクスト>前= P。 ( L *) - >前= P-> 前; リターンOK。 } ボイドシーザー(DuLinkList * L、int型のI) { 場合(I> 0 ) { ん { ( L *)=(L *) - > 次。 } 一方、( - I)。 } もし(I < 0 ) { 行う { ( L *)=(L *) - > 前; } 一方、(++ I)。 } } int型のmain() { DuLinkList L。 int型私は、N。 InitList( &L)。 printf(" 请输入一个整数:" ); scanf_s(" %のD "、&N) printf(" \ n個" ); シーザー(&L、N)。 ため、私は=(0; I < 26 ; I ++ ) { L = L-> 次。 printf(" %のC "、(L) - > データ)。 } のprintf(" \ n " ); リターン 0 ; }