定義:
如果在鍊錶中,每個結點只有乙個指標,所有結點都是單線聯絡,除了末尾結點指標為空外,每個結點的指標都指向下一結點,一環扣一環形成一條線性鏈,稱此鍊錶為單向先行鍊錶,簡稱單鏈表。
特點:
(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...