線性表的靜態單鏈表儲存結構

2022-09-08 09:54:07 字數 1541 閱讀 3176

// c2-3.h 線性表的靜態單鏈表儲存結構(見圖2.23)

#define max_size 100 // 鍊錶的最大長度

typedef struct

component,slinklist[max_size];

// algo2-7.cpp 教科書中圖2.10靜態鏈表示例

// 第1個結點的位置在[0].cur中。成員cur的值為0,則到鍊錶尾

#include"c1.h"

#define n 6 // 字串長度

typedef char elemtype[n];

#include"c2-3.h"

void main()

,,,,,,,

,}; // 教科書中圖2.10(a)的狀態

int i;

i=s[0].cur; // i指示第1個結點的位置

while(i)

printf("\n");

s[4].cur=9; // 按教科書中圖2.10(b)修改(在"li"之後插入"shi")

s[9].cur=5;

strcpy(s[9].data,"shi");

s[6].cur=8; // 刪除"zheng"

i=s[0].cur; // i指示第1個結點的位置

while(i)

printf("\n");

}

執行結果如下:

algo2-7.cpp 輸出不是按陣列下標的順序輸出的,而是像鍊錶一樣,由當前結點cur 域

的值決定下乙個結點的位置確定輸出。這就是鍊錶的特點。但algo2-7.cpp 插入新結點是

完全靠人工判斷該結點是否為空閒結點,而不是「自動地」找到空閒結點作為新結點,該

方法不能滿足實際應用的需要。為了解決這個問題,將所有空閒結點鏈結形成乙個備用鏈

表,陣列下標為0 的單元為備用鍊錶的頭結點(這時,鍊錶的頭結點就不能再是陣列下標

為0 的單元了,需要另外定義)。靜態陣列實際有2 個鍊錶,乙個鍊錶上鏈結的是線性表

的結點,另乙個鍊錶(備用鍊錶)上鏈結的是所有沒被使用的結點。靜態陣列的每乙個元素

都鏈結在這2 個鍊錶中的乙個上。當線性表需要新結點時,把備用鍊錶中的首元結點(由

[0].cur 指示)從備用鍊錶中刪除,作為新結點,插入線性表。當刪除線性表中的結點時,

被刪除的結點插入備用鍊錶中,成為備用鍊錶的首元結點。之所以從備用鍊錶刪除結點或

向備用鍊錶插入結點都在表頭進行,是因為這樣效率最高。開闢新結點和**空閒結點的

操作如演算法2.15、2.16 所示,在程式func2-2.cpp 中實現。

*/

線性表的鏈式儲存結構 單鏈表

線性表中每個節點有唯一的前趨節點和後繼節點 每個 物理節點增加乙個指向後繼節點的指標域 單鏈表 每個物理節點增加乙個指向後繼節點和前趨節點的指標域 雙鏈表 單鏈表的特點 當訪問乙個節點後,只能接著它的後繼節點,而無法訪問它的前趨節點。1.單鏈表插入節點 操作 將值為x的新節點 s插入到 p節點之後 ...

線性表的鏈式儲存結構之單鏈表

void initlist list plist 初始化 plist next null 2 插入元素 insert 1 宣告結點p指向鍊錶第乙個結點 2 當p null時,就遍歷鍊錶,讓p的指標向後移動,不斷指向下乙個結點,i 3 若到鍊錶末尾p為空,則說明第i個元素不存在 4 否則查詢成功,在系...

鍊錶 線性表的鏈式儲存結構(單鏈表)

新技術新方法的產生都是為了實際遇到的問題,單鏈表的出現也是為了解決順序表在某些方面的不足,比如順序表的插入和刪除都需要移動大量的元素。首先了解一下單鏈表的定義 為了表示每個資料元素與其直接後繼元素之間的邏輯關係 每個元素除了儲存本身的資訊外 還需要儲存指示其直接後繼的資訊 單鏈表的一些基本概念 表頭...