雙鏈表 迴圈鍊錶

2021-08-16 00:06:50 字數 1127 閱讀 1275

一、雙鏈表

對於雙鏈表,採用類似於單鏈表的型別定義,其dlinklist型別的定義如下:

typedef struct dnode       //宣告雙鏈表節點型別

dlinklist;

1.建立雙聯表

1)頭插法

void createlistf(dlinklist *&l,elemtype a,int n)

//頭插法建立雙鏈表:由含有n個元素的陣列a建立帶頭節點的雙鏈表l

} 2)尾插法

void createlistr(dlinklist *&l,elemtype a,int n)

//尾插法建立雙鏈表:由含有n個元素的陣列a建立帶頭節點的雙鏈表l

r->next=null;//尾節點next域置為null

}2.插入節點

int listinsert(dlinklist *&l,int i,elemtype e)

if (p==null)//未找到第i-1個節點,返回false

return -1;

else//找到第i-1個節點*p,在其後插入新節點*s

}3.刪除節點

int listdelete(dlinklist *&l,int i,elemtype &e)

if (p==null)   //未找到第i-1個節點

return -1;

else   //找到第i-1個節點*p

}二、迴圈鍊錶

迴圈鍊錶是另一種形式的鏈式儲存結構。它的特點是表中最後乙個節點的指標域不再是空,而是

指向表頭節點

,整個鍊錶

形成乙個環

。由此從表中任一節點出發均可找到鍊錶中其他節點。 

例1,編寫出判斷帶頭節點的雙向迴圈鍊錶l是否對稱相等的演算法。

解:p從左向右掃瞄l,q從右向左掃瞄l,若對應資料節點的data域不相等,則退出迴圈,否則繼續比較,直到p與q相等或p的下乙個節點為*q為止。

int equeal(dlinklist *l)

return same;

}

迴圈鍊錶 迴圈雙鏈表 迴圈單鏈表

迴圈單 雙鏈表,建立 初始化 尾插 頭插 遍歷 插入 刪除 判空 部分函式採用過載 此處為c include include include using namespace std typedef struct lnodelnode,linklist typedef struct dnodednod...

雙鏈表 迴圈鍊錶 靜態鍊錶

一 雙鏈表 單鏈表有乙個大問題就是訪問後繼結點比較方便,但是如果訪問前驅結點,就需要從頭開始來一遍,時間複雜度為o n 這就很讓人不爽了,所以就有了雙鏈表。顧名思義,雙鏈表就是結點中有兩個指標prior和next,分別指向其前驅結點和後繼結點。如下圖所示 雙鏈表中結點型別的描述如下 typedef ...

迴圈鍊錶和雙鏈表

1 假設在長度大於1的單迴圈鍊錶中,既無頭結點也無頭指標。s為指向某個結點的指標,試編寫演算法刪除結點 s的直接前驅結點。2 已知由單鏈表表示的線性表中,含有三類字元的資料元素 如 字母 數字和其它字元 設計演算法構造三個以迴圈鏈表示的線性表,使每乙個表中只含同一類的字元,且利用原表中的結點空間作為...