當前位置:編程學習大全網 - 編程語言 - C語言建立帶頭結點的單鏈表

C語言建立帶頭結點的單鏈表

單鏈表的生成有2種方式:頭插法和尾插法。

1、頭插法

/*********************************************************************

*?函數名稱:linklist?*CreateLinklistHead()

*?函數功能:利用頭插法創建鏈表

*?參數:無

*?返?回?值:創建完鏈表後的鏈表頭結點

*?說明:無

*********************************************************************/

extern?linklist?*CreateLinklistHead()

{

int?x,?i,?nodeNum;

linklist?*head,?*temp;?//?頭結點與臨時結點

head?=?(linklist?*)malloc(sizeof(linklist));?//?生成表頭結點

head->next?=?NULL;//?給表頭結點的指針域賦值

printf("請輸入鏈表中結點的個數:");

scanf("%d",?&nodeNum);

for(i=1;?i<=nodeNum;?i++)

{

printf("請輸入第?%d?個結點的數據:",?i);

scanf("%d",?&x);

temp?=?(linklist?*)malloc(sizeof(linklist));?//?生成新的結點

temp->data?=?x;//?對新結點的數據域賦值

//?將新結點插到頭結點之後

temp->next?=?head->next;?

head->next?=?temp;

}

return?head;?//?返回新建鏈表的頭結點

}

2、尾插法

/*********************************************************************

*?函數名稱:linklist?*CreateLinklistRear()

*?函數功能:利用尾插法創建鏈表

*?參數:無

*?返?回?值:創建完鏈表後的鏈表頭結點

*?說明:無

*********************************************************************/

extern?linklist?*CreateLinklistRear()

{

int?x,?i,?nodeNum;

linklist?*head,?*rear,?*temp;?//?定義頭結點、尾結點和臨時結點

head?=?(linklist?*)malloc(sizeof(linklist));?//?生成表頭結點,表頭結點不存放數據

head->next?=?NULL;?//?將表頭結點的指針域賦值為NULL

rear?=?head;?//?將表頭結點賦值給表尾結點

printf("請輸入鏈表中結點的個數:");

scanf("%d",?&nodeNum);

for(i=1;?i<=nodeNum;?i++)

{

printf("請輸入第?%d?個結點的數據:",?i);

scanf("%d",?&x);

temp?=?(linklist?*)malloc(sizeof(linklist));?//?生成新的結點

temp->data?=?x;//?新增結點的數據域

temp->next?=?NULL;?//?新增結點的指針域(由於是尾插法,所以插入的結點都在尾部,即指針域為NULL)

rear->next?=?temp;?//?使前壹個結點指向新增結點(head->next=temp)

rear?=?temp;?//?將新增結點賦值給尾結點(尾插法,插入的結點在尾部)(rear=head->next)

}

//rear->next?=?NULL;?//?將尾結點的指針域賦值為空(為了方便檢驗鏈表是否為空鏈表)

return?head;?//?返回頭結點

}

  • 上一篇:數控排鉆技術在機械行業中應用有哪些優勢?
  • 下一篇:奔馳“懸崖勒馬” 1.5T遭官方“淘汰”
  • copyright 2024編程學習大全網