标签:
/*
目的:创建一个单链表,实现尾部插入,头部插入,遍历链表
*/
#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