程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 創建一個單鏈表,實現頭部插入和尾部插入,單鏈尾部

創建一個單鏈表,實現頭部插入和尾部插入,單鏈尾部

編輯:關於C語言

創建一個單鏈表,實現頭部插入和尾部插入,單鏈尾部


/*
目的:創建一個單鏈表,實現尾部插入,頭部插入,遍歷鏈表
*/


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//定義一個結構體,用來表示一個節點,包含指針域,數據域

struct node
{
int data; //數據域

struct node *next; //指針域,指向節點的指針,用來連接兩個節點
};

//定義一個函數,用來創建節點,為節點分配堆內存,由於堆內存殘留有隨機值,創建成功後清空內存
//函數的返回值需要是struct node *類型,因為創建了一個節點,要操作這個節點,就需要得到這個節點的地址信息

struct node *create_node(int data) //int data :為節點的數據域傳值
{
struct node *p = (struct node *)malloc(sizeof(struct node)); // 創建一個節點,並返回其地址值保存到 p 中

if(NULL == p) //判斷節點是否成功創建
{
printf("malloc erro");
return NULL;
}

bzero(p,sizeof(struct node)); //調用#include <string.h>中的函數,功能是清理申請的髒內存

//節點創建成功並清理後,就填充節點
p -> data = data;
p -> next = NULL;

return p; //返回節點的地址值
}


//尾部插入函數的實現:通過頭指針找到最後一個節點,再將新節點與最後一個節點關聯,插入完成;
void insert_tail(struct node *pHeader,struct node *new)
{
//接收頭指針的值,開始遍歷鏈表,找到尾節點
struct node *p = pHeader;

while(NULL != p -> next) //遍歷鏈表,找到尾節點
{

p = p -> next;

}

//遍歷結束,找到最後一個節點就是p
//將新節點的地址值放入最後一個節點的指針域

p -> next = new; //尾部插入成功

new -> next = NULL;
}

 

//頭部插入函數的實現:先將第一個節點的地址值放入新節點的指針域,再將新節點的地址放入頭節點的指針域
void insert_head(struct node *hNode,struct node *new)
{
if(NULL == hNode -> next)
{
hNode -> next = new;
new -> next = NULL;
}
else
{
new -> next = hNode -> next;
hNode -> next = new;
}

}

 

 

 

 

 

int main(void)
{
struct node *pHeader = create_node(0);
insert_head(pHeader,create_node(1));
insert_head(pHeader,create_node(2));
insert_head(pHeader,create_node(3));
insert_head(pHeader,create_node(4));

printf("*********************************頭部插入********************************\n");
printf("node 1:%d.\n",pHeader -> next -> data);
printf("node 2:%d.\n",pHeader -> next ->next -> data);
printf("node 3:%d.\n",pHeader -> next -> next ->next ->data);
printf("node 4:%d.\n",pHeader -> next ->next ->next ->next -> data);


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

struct node *pH = create_node(0);
insert_tail(pH,create_node(1));
insert_tail(pH,create_node(2));
insert_tail(pH,create_node(3));
insert_tail(pH,create_node(4));

printf("*********************************尾部插入********************************\n");
printf("node 1:%d.\n",pH -> next -> data);
printf("node 2:%d.\n",pH -> next ->next -> data);
printf("node 3:%d.\n",pH -> next -> next ->next ->data);
printf("node 4:%d.\n",pH -> next ->next ->next ->next -> data);

return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved