一、雙鏈表
對於雙鏈表,採用類似於單鏈表的型別定義,其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 已知由單鏈表表示的線性表中,含有三類字元的資料元素 如 字母 數字和其它字元 設計演算法構造三個以迴圈鏈表示的線性表,使每乙個表中只含同一類的字元,且利用原表中的結點空間作為...