二 單鏈表的頭插法建表和尾插法建表

2021-09-22 02:15:47 字數 2933 閱讀 2291

鏈式儲存結構:

用一組不一定連續的儲存單元儲存邏輯上相鄰的元素,元素間的邏輯關係是由附加的指標域表示的,由此得到的儲存結構稱為鏈式儲存結構。

單鏈表(線性鍊錶)
使用鏈式儲存結構表示每個資料元素 ai

時,除了儲存 ai

本身資訊之外,還需要乙個儲存指示其後繼元素 ai+1

儲存位置的指標。由這兩部分組成元素 ai

的儲存映像稱為結點。它包括兩個域:儲存資料元素的域稱為資料域,儲存直接後繼儲存位址的域稱為指標域。利用這種儲存方式表示的線性表稱為鍊錶,n個結點鏈成乙個鍊錶,即為線性表的鏈式儲存結構。由於這種鍊錶的每個結點中只包含乙個指標域,因此又稱為單鏈表

乙個單鏈錶可由頭指標唯一確定,因此單鏈表可以用頭指標的名字來命名。

鏈式儲存結構如下:

typedef

int datatype;

//定義資料型別

typedef

struct node //結點型別定義

listnode;

typedef listnode * linklist;

//定義乙個指標型別

頭插法建表

頭插法建表是從乙個空表開始,重複讀入資料,生成新節點,將讀入的資料存放到新節點的資料域中,然後將新節點插入到當前鍊錶的表頭上,直到讀入結束標誌為止。

/*

頭插法建表,並返回頭指標

*/linklist createlistf

(int arr,

int length)

return head;

}

頭插法建立的鍊錶是將新結點插入在表頭,演算法比較簡單,但新建鍊錶中的結點次序和陣列順序相反。如果想要和陣列順序一致,可以使用尾插法建表。

尾插法建表

將新節點插入當前鍊錶的表尾上,因此需要增設乙個尾指標near,使其始終指向鍊錶的尾節點。

/*

尾插法建表,並返回頭指標

*/linklist createlistr

(int arr,

int length)

else

rear = p;

//表尾指標指向新的表尾指標

printf

("data=%d p=%p\n"

,p->data,p);}

if(rear !=

null

)return head;

}

主程式**:

#include

#include

"e:/dev/c/datastructure/chapter2/linklist.c"

void

printlink()

;int

main()

; linklist head =

null

;printf

("頭插法\n");

head =

createlistf

(arr,3)

;printf

("head= %p\n"

,head)

;printlink

(head)

;printf

("尾插法\n");

head =

createlistr

(arr,3)

;printf

("head= %p\n"

,head)

;printlink

(head)

;return0;

}/*列印輸出鍊錶

*/void

printlink

(linklist head)

printf

("\n");

}

編譯執行,輸出結果:

可以看出頭插法輸入123,輸出321。尾插法輸入123,輸出123。

頭插法新建鍊錶節點的次序和輸入時的順序相反,尾插法新建鍊錶節點次序和輸入次序相同。

引入帶頭節點

為了簡化演算法,方便操作,在鍊錶開始結點前附加乙個結點,稱為頭結點。如下

尾插法建立單鏈表演算法可簡化:

/*

尾插法建立帶頭節點的單鏈表演算法

*/linklist createlistr1

(int arr,

int length)

r->next =

null

;//終端結點指標域置空

return head;

}

輸出結果

尾插法建立帶頭結點單鏈表

data=1 p=0000000000176cf0

data=2 p=0000000000176d10

data=3 p=0000000000176d30

輸出:1512480 1 2 3

因為增加了頭結點,所以輸出也就多了一位。因為頭結點沒有賦值,所以值是沒有意義的。

頭插法和尾插法建立單鏈表

頭插法和尾插法建立單鏈表 include using namespace std typedef int elemtype typedef struct lnode linklist 頭插法建表 從尾部乙個乙個往前插入 void createlisthead linklist l,elemtype ...

頭插法和尾插法建立單鏈表

頭插法建立單鏈表 include include typedef struct lnodenode,linklist linklist headinsert linklist 頭插法建立單鏈表 void output linklist 遍歷輸出 int main void 頭插法建立單鏈表 link...

單鏈表的頭插法與尾插法

頭插法 在頭結點 為了操作方便,在單鏈表的第乙個結點之前附加乙個結點,稱為頭結點。頭結點的資料域可以儲存資料標題 表長等資訊,也可以不儲存任何資訊,其指標域儲存第乙個結點的首位址 h之後插入資料,其特點是讀入的資料順序與線性表的邏輯順序正好相反。尾插法 將新節點插入到當前節點的表尾結點之後。incl...