码迷,mamicode.com
首页 > 其他好文 > 详细

创建一个单链表,实现头部插入和尾部插入

时间:2016-01-06 14:08:11      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:

/*
目的:创建一个单链表,实现尾部插入,头部插入,遍历链表
*/


#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;
}

创建一个单链表,实现头部插入和尾部插入

标签:

原文地址:http://www.cnblogs.com/ldhbetter/p/5105059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!