鍊錶(C語言)

2021-08-28 02:12:05 字數 1752 閱讀 1240

typedef struct stu

stu,*student;

鍊錶是用指標連線起來的線性表,對於鍊錶的每個結點,都要給它動態分配記憶體,這點很重要,不然程式會崩潰。

student create_1()//遞迴方式建立鍊錶 

return null;

}

非遞迴方式:用陣列的方式,陣列中每個元素都是鍊錶的乙個結點,通過遍歷陣列,來將鍊錶連線起來。

student create_2(int n)//非遞迴方式建立鍊錶 

for(i=0;inext=parr[i+1];

parr[i]->next=null;//若尾結點指向空,則這是單鏈表,若指向頭結點,則這是迴圈鍊錶,長度就是陣列長度。

return parr[0];

}

建立迴圈鍊錶:上一中非遞迴方式也可以建立迴圈鍊錶,這是第二種方式。

student create_3(int n)//建立長度為n的迴圈鍊錶 

return phead;

}

刪除乙個元素:實現原理是將該元素的前乙個結點指向該結點的後乙個結點,這樣再鍊錶遍歷時,就跳過了這個結點。再將要刪除這個結點的記憶體清空。

void delete(student head,int d)//刪除指定元素 

else

}}

插入乙個元素:為新插入的結點分配記憶體,而且插入位置的原結點要指向新結點,新結點指向原結點的後乙個結點。

void insert(student parr,int element,int position)//插入乙個元素到指定位置 

使用棧結構:先從前往後逐個壓入棧,再從後往前逐個出棧。

student resever_1(student head)//用棧實現鍊錶的反序 

student temp=head;

while(top>=0)

head->next=null;

return temp;//temp為反序後的新鍊錶的頭結點

}

不使用多餘空間,原地反序:

student resever_2(student head)//鍊錶的原地反序 

return p1;

}

值的注意的是,鍊錶是單向性的,且指標一次只能移動乙個位置,所以在鍊錶的操作中總是需要定義兩到三個結構體指標,才足夠完成操作。

約瑟夫環是鍊錶中乙個經典的問題,其實就是迴圈鍊錶。經典問題就是報數,一共n個人,從第1個人開始報數,報到m的那個人被淘汰退出報數,下個人繼續從1開始報數,輸出被淘汰的人的編號。

首先要建立乙個長度為n的迴圈鍊錶,

#include#includetypedef struct stu

stu,*student;

int i;

int main()

for(i=0;inext=parr[i+1];

parr[i]->next=parr[0];

student p=parr[i],p1=parr[0];

while(m--)

printf("%d ",p1->num);

p1=p1->next;

p->next=p1;

} return 0;

}

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

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

c語言鍊錶 鍊錶

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

c語言 鍊錶 C語言之鍊錶入門

鍊錶三要素 1 頭指標 head 是用來說明鍊錶開始了,頭指標就代表鍊錶本身 所以以後要訪問鍊錶,就要訪問頭指標 2 結點 node 鍊錶中每乙個結構體變數 3 尾指標 用來說明鍊錶的結束 它是乙個空指標,null include includetypedef struct stud 定義了乙個結構...