雙鏈表
對於雙鏈表,採用類似於單鏈表的型別定義,其dlinklist型別的定義如下:
typedef
struct dnode //宣告雙鏈表節點型別
1. 建立雙鏈表
建立雙鏈表也有兩種方法。和頭插法建立單鏈表的過程相似,採用頭插法建立雙鏈表的演算法。
void createlistf(dlinklist *&l,elemtype a,int n)
//頭插法建立雙鏈表:由含有n個元素的陣列a建立帶頭節點的雙鏈表l
}
void createlistr(dlinklist *&l,elemtype a,int n)
//尾插法建立雙鏈表:由含有n個元素的陣列a建立帶頭節點的雙鏈表l
r->next=null; //尾節點next域置為null
}
線性表基本運算在雙鏈表中的實現
和單鏈表相比,主要是插入和刪除運算不同。
null) //未找到第i-1個節點,返回false
return
false;
else
//找到第i-1個節點*p,在其後插入新節點*s
}
(2)刪除*p節點之後的乙個節點
null) //未找到第i-1個節點
return
false;
else
//找到第i-1個節點*p
}3.迴圈鍊錶
迴圈鍊錶是另一種形式的鏈式儲存結構。它的特點是表中最後乙個節點的指標域不再是空,而是指向表頭節點,整個鍊錶形成乙個環。由此從表中任一節點出發均可找到鍊錶中其他節點。
例:編寫出判斷帶頭節點的雙向迴圈鍊錶l是否對稱相等的演算法。
解:p從左向右掃瞄l,q從右向左掃瞄l,若對應資料節點的data域不相等,則退出迴圈,否則繼續比較,直到p與q相等或p的下乙個節點為*q為止。
int equeal(dlinklist *l) 雙向迴圈鍊錶
return same;
}
4.靜態鍊錶
靜態鍊錶借用一維陣列來描述線性鍊錶。陣列中的乙個分量表示乙個節點,同時使用游標(指示器cur即為偽指標)代替指標以指示節點在陣列中的相對位置。陣列中的第0個分量可以看成頭節點,其指標域指示靜態鍊錶的第乙個節點。
這種儲存結構仍然需要預先分配乙個較大空間,但是在進行線性表的插入和刪除操作時不需要移動元素,僅需要修改「指標」,因此仍然具有鏈式儲存結構的主要優點。
下圖給出了乙個靜態鍊錶的示例。圖(a)是乙個修改之前的靜態鍊錶,圖(b)是刪除資料元素「陳華」之後的靜態鍊錶,圖(c)插入資料元素「王華」之後的靜態鍊錶,圖中用陰影表示修改的游標。
線性表 鏈式儲存結構之雙鏈表
該文章主要介紹線性表的鏈式儲存運算以及相關運算 雙鏈表。標頭檔案 dlinklist.h template struct dlinklist 雙鏈表結點型別 template class dlinklistclass 雙鏈錶類 原始檔 dlinklist.cpp include include dl...
線性表的鏈式儲存結構 單鏈表
線性表中每個節點有唯一的前趨節點和後繼節點 每個 物理節點增加乙個指向後繼節點的指標域 單鏈表 每個物理節點增加乙個指向後繼節點和前趨節點的指標域 雙鏈表 單鏈表的特點 當訪問乙個節點後,只能接著它的後繼節點,而無法訪問它的前趨節點。1.單鏈表插入節點 操作 將值為x的新節點 s插入到 p節點之後 ...
線性表 鏈式儲存結構之迴圈雙鏈表
該文章主要介紹線性表的鏈式儲存運算以及相關運算 迴圈雙鏈表。標頭檔案 cdlinklist.h template struct dlinklist 迴圈雙鏈表結點型別 template class cdlinklistclass 迴圈雙鏈錶類 原始檔 cdlinklist.cpp include i...