雙向鍊錶結點結構
既然單鏈表可以有迴圈鍊錶,那麼雙向鍊錶當然也可以有。
由於這是雙向鍊錶,那麼對於鍊錶中的某乙個結點p,它的後繼結點的前驅結點是它本身。
**實現:
s->next = p;
s->prior = p->prior;
p->prior->next = s;
p->prior = s;
關鍵在於交換的過程中不要出現矛盾,例如第四步先被執行了,那麼p->prior就會提前變成s,使得插入的工作出錯。
**實現:
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
雙向鍊錶可以有效提高演算法的時間效能,說白了就是用空間來換取時間。
要求實現使用者輸入乙個數使得26個字母的排列發生變化,例如使用者輸入3,輸出結果:
defghijklmnopqrstuvwxyzabc
同時需要支援負數,例如使用者輸入-3,輸出結果:
xyzabcdefghijklmnopqrstuvw
**實現:
#include #include #define ok 1
#define error 0
typedef char elemtype;
typedef int status;
typedef struct dualnodedualnode,*dulinklist;
status initlist(dulinklist *l)
(*l)->next = (*l)->prior = null;
p = (*l);
for(i=0;i<26;i++)
q->data = 'a'+i;
q->prior = p;
q->next = p->next;
p = q;
}p->next = (*l)->next;
(*l)->next->prior = p;
return ok;
}void caesar(dulinklist *l,int i)while(--i);
}if(i<0)while(++i);
}}int main()
printf("\n");
return 0;
}
《資料結構 線性表》鏈式儲存 雙向鍊錶
一 雙向鍊錶定義 在單鏈表的每個節點中,在設定乙個指向前驅節點的指標域 所以在雙向鍊錶結點都有兩個指標域,乙個指向前驅位置,乙個指向後驅位置。二 雙鏈和單鏈的區別 相同 由於雙向鍊錶是從單向鍊錶衍生出來的,所以在 計算鍊錶長度 查詢元素位置 查詢元素中,都只需要涉及乙個方向的指標就可以,在這方面,他...
資料結構 線性表鏈式儲存結構 雙向鍊錶
巨集定義 define failed 0 define success 1 typedef struct dnode dlinknode 建立鍊錶 頭插法 dlinknode createdlinklistf int a,int n return l 尾插法 dlinknode createdlin...
線性表鏈式儲存結構
include include 線性表鏈式儲存結構 typedef struct lnodelnode,linklist int initlist linklist l 初始化 int endinsert linklist l,int e p next s return 1 末尾插入元素 int g...