C語言基礎 單鏈表(上)

2021-07-30 10:16:14 字數 1634 閱讀 1425

定義:

如果在鍊錶中,每個結點只有乙個指標,所有結點都是單線聯絡,除了末尾結點指標為空外,每個結點的指標都指向下一結點,一環扣一環形成一條線性鏈,稱此鍊錶為單向先行鍊錶,簡稱單鏈表。

特點:

(1)有乙個head指標變數,他存放第乙個結點的位址,稱為頭指標。

(2)每個結點都包含乙個資料域和乙個指標域,資料域存放使用者需要的實際資料,指標域存放下乙個結點的位址。從頭指標head開始,head指向第乙個結點,第乙個結點指向下乙個,直到最後乙個結點。所有結點都是單線聯絡環環相扣。

(3)最後乙個結點不再指向其他結點,稱為表尾結點,它的指標域為空指標null,表示鍊錶到此結束,指向表尾節點的指標稱為尾指標。

(4)鍊錶各結點之間的順序關係由指標域來確定,並不要求邏輯上相鄰的結點物理位置上也相鄰,即鍊錶依靠指標相連不需要占用一片連續的記憶體空間。

(5)隨著資料處理量的增加,鍊錶可以不受程式中變數定義的限制無限延長(僅受記憶體總量的限制)。再查入和刪除操作中,只需修改相關節點指標域的鏈結關係,不需要像陣列那樣大量的改變資料實際儲存位置,鍊錶的使用可以使程式的記憶體利用率和時間效率大大提高。

單鏈表的建立:

單鏈表的建立就是在程式執行過程中,從無到有的建立乙個鍊錶,即乙個乙個分配節點的記憶體空間,然後輸入結點中的資料,並建立結點間的相連關係。

eg:將乙個班級的學生作為鍊錶中的結點,然後將所有學生的資訊存放到鍊錶結構中。

首先,要建立結點結構,表示每乙個學生。

struct student;

然後定義乙個create函式,用來建立鍊錶,該函式將會返回鍊錶的頭指標。int icount;

struct student *create()

else

pnew=(struct student *)malloc(sizeof(struct student));//重新分配結點所佔記憶體空間

scanf("%s",pnew->cname);

scanf("%d",&pnew->inumber);

} free(pnew);//釋放記憶體

return phead;

}

create函式的功能是建立鍊錶,在create函式外使用了全域性變數icount用來記錄鍊錶中結點的個數。在create函式中首先定義需要用到的指標變數:phead表示頭指標,pnew表示新建立的結點,pend表示指向原來的尾結點。

然後用malloc函式分配記憶體,先用pend和pnew兩個指標指向第乙個分配的記憶體,然後分別輸入第乙個學生的姓名和學號,使用while語句進行判斷,如果學號為0則結束迴圈。在while迴圈中,使用icount++操作表示鍊錶結點個數的增加,next判斷新加入的結點是否是第一次加入的結點,如果是執行if,不是執行else。

在if語句中,由於第一次加入的新結點即為首結點,也是最後乙個結點,且新加入結點的指標應指向null(phead指向)。在else語句中,實現的是鍊錶中已有結點時進行插入的操作。首先將新結點pnew的指標指向null,然後將原來最後乙個結點的指標指向新結點,最後將pend指標指向最後乙個結點(新結點)。

每個結點建立完後要再次分配記憶體,然後向其中輸入資料,通過while語句進行判斷輸入的語句是否滿足結點的要求,當節點不符合要求時,將終止迴圈,並用free函式將結點所佔的記憶體釋放。

單鏈表基礎 C語言

題目 1 4 include include define elemtype char typedef struct node node typedef node linklist void initlist linklist l void createfromtail linklist l r n...

C語言單鏈表

include include include define error 0 typedef struct lnode lnode,linklist linklist initlist linklist l node next null l node return l int listlength ...

c語言 單鏈表

單鏈表,顧名思義是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。我們在這裡使用c語言實現 h 檔案 pragma on...