鍊錶基本操作

2021-08-17 21:10:23 字數 2195 閱讀 8777

一、什麼是鍊錶

鍊錶,又稱為線性表的鏈式儲存結構,是一種離散儲存。因為線性表的順序儲存結構在增刪上需要移動大量元素,耗費大量時間。進而出現了通過隨機儲存,指標記錄位址的離散儲存。即,**有空,資料就存在**,只需記錄其位址即可。大致思路可參考出自《大話資料結構》的下圖。

二、鍊錶基本內容

三、基本**

1.結構體指標

typedef struct node

node ,*pnode;

node 為結構體指標的新名字,在使用結構體指標時呼叫,*pnode則為結構體函式的指標,在後期使用指標函式時可以呼叫[ eg.pnode name ( ) =node * name ( ) ] ,簡化**。

2.結點的建立

//create a node

pnode create(int n)//n means the number of node you create

return phead;

}

結點的建立涉及到指標的移動,如果不清楚可以借助之前的圖形來看。

3.鍊錶的輸出

//print function()

void print(pnode phead)

printf("--------------------------------\n\n");

}

讀取時指標往後移即可

4.結點的插入(此處介紹頭插法)

//insert function(insert to the head)

pnode insert(pnode phead)

這裡的插入是用的頭插法,即只需知曉頭結點,將頭結點的指標域指向插入的結點,插入的結點的指標域指向先前的頭結點,進而使插入的結點更新為頭結點。

5.結點的刪除

//delete the node

pnode delete(pnode phead , char name)

p1->next=ptemp->next;//skip the ptemp node

free(ptemp);//delete it

printf("delete succeed!\n");

return phead;

}

結點的刪除首先需找到所要刪除結點的位置,在查詢所需刪除結點的位置時需記錄該結點的前乙個結點,在刪除時直接將前乙個結點的指標域向後移乙個結點即可。即前乙個結點的指標域等於後乙個結點的指標域。

6.鍊錶排序

// exchange node

int bubblesort(pnode head)

pre=pre->next;

p=pre->next;

}p1=p1->next;

}printf("排序完成!\n");

system("pause");

}

鍊錶排序總的來說有兩種,一種為交換結點,一種為直接交換結點中的資料域。交換資料域和普通排序差別不大,但交換結點就要考慮指標的變換,這個時候,或個簡單的示意圖就會比較清晰。在改變指標的時候會發現當乙個位址有兩個指標都指向它時,就可以移動其中某乙個指標進而進行下乙個指標域的交換。而這個交換也是需要記錄需要交換的結點的前乙個結點的資訊的。

四、小結

首先,個人認為,當鍊表中結點的移動與交換出現問題時,可以嘗試畫乙個示意圖,可以有助於你理解指標的變化。其次,鍊錶較之於順序表的優點在於它可以自由控制長度,節約空間。當需要大量的增刪時,鍊錶的處理更勝於順序表。最後,當你熟悉了單鏈表的操作後,你自己就會模擬出雙向鍊錶和迴圈鍊錶建立和使用。

鍊錶基本操作

include include string h include typedef struct stust void xj st h 生成單鏈表 l l null void shc st h 輸出鍊錶 printf d n h d void chr st h 按大小插入元素 else h h l v...

鍊錶基本操作

動態記憶體的相關知識int p null 定義指標變數 p int malloc sizeof int 申請記憶體空間,並且進行強制型別轉換 p 3 使用指標變數 typedef struct list typedef struct listnode listpointer struct listn...

鍊錶基本操作

鍊錶就是c中利用結構體,將資料和下乙個結構體的位址封裝在乙個結構體中形成乙個節點,這些節點組合起來就是乙個基礎的鍊錶,根據需要可以擴充套件其中的內容來實現不同的需求。實現乙個鍊錶需要定義節點,建立,初始化,插入,刪除這些基本操作。include stdafx.h include stdlib.h i...