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 定義了乙個結構...