C語言通過鍊錶了解指標

2021-10-08 20:52:11 字數 1119 閱讀 6905

我們知道鍊錶的基本單元就是乙個結構體,如:

typedef struct node

node,*pnode;

結構體中包括本結點的值和指向下一塊結構體的指標(c語言中不能在結構體中定義自己,所以需要存放結構體指標),通過指標將結點乙個乙個連線起來,形成簡單的單鏈表。

typedef 將定義結構體重命名為node以及將定義結構體指標命名為pnode,方便在後續程式設計中使用結構體。

首先來看一下簡單有關鍊錶操作的函式宣告

void initlink(pnode *p); //初始化頭指標

void print(pnode p); //列印鍊錶的值

int getlength(pnode p); //獲取鍊錶的長度

//在指定位置上插入乙個資料

void addbyindex(pnode *p,int index,int val);

第乙個函式,傳入的是指標,指向鍊錶的頭結點指標,此時在主函式中 pnode head;只是對頭結點的乙個宣告,要使用的話必須在ininlink函式中實現分配記憶體,傳參的本質是在記憶體新開闢乙個空間,如果傳的引數是 pnode p,程式會在新開闢的空間中重新宣告乙個p,這個與主函式的p有不一樣的記憶體位址,所分配的空間指向為新宣告的p,無法為主函式中p分配空間。當傳入是pnode p 時,為p分配的記憶體就是主函式中p的記憶體,此時的p為指向主函式head的指標。

弄懂函式傳參原理後,對後面幾個函式就有很好的理解。

第二個函式傳的pnode p,此時的p相當於head的副本,但副本中next的指向與主函式中head的next指向是相同的,相當於有兩頭指標同時指向乙個鍊錶。此函式是實現列印功能的,所以要小心資料的修改。

第三個函式與第二個函式差不多。

大部分都是這種情況!

第四個函式,傳參是pnode *p,在這裡其實跟傳pnode p的效果是一樣的,只是為了不用重新在為頭結點建立副本,也可以用帶返回值的函式。

總的來說,指標功能是非常的強大的,用得好的話,可以事半功倍,不好的話,就一大堆記憶體溢位問題。技術有限,還望多多包涵

c語言 鍊錶 C語言鍊錶例項 玩轉鍊錶

下圖為最一簡單鍊錶的示意圖 第 0 個結點稱為頭結點,它存放有第乙個結點的首位址,它沒有資料,只是乙個指標變數。以下的每個結點都分為兩個域,乙個是資料域,存放各種實際的資料,如學號 num,姓名 name,性別 和成績 score 等。另乙個域為指標域,存放下一結點的首位址。鍊錶中的每乙個結點都是同...

c語言鍊錶 鍊錶

在儲存一大波數的時候,我們通常使用陣列,但有時候陣列顯得不夠靈活,比如有一串已經從小到大排序好的數 2 3 5 8 9 10 18 26 32 現在需要往這串數中插入6使其得到的新序列仍符合從小到大排列。如果我們使用陣列來實現這一操作,則需要將8和8後面的數字都依次往後挪一位,如果你覺得這幾個數不算...

C語言 關於用指標處理鍊錶

指標 指標的定義 型別名 指標變數名 如 int p 定義的同時進行初始化 int p a 指針對陣列的引用 int a 5 int p p a 0 表示把a 0 的位址賦值給指標p 或者寫 p a 表示把陣列a首元素的位址 即a 0 陣列指標的運算 p 與 p 是不同的 p 是先取 p 的值,然後...