简单链表(1)

#include <stdio.h> 
#include <malloc.h>  //用于动态分配函数malloc
#include <stdlib.h>  //用于exit()函数, 用来终止整个程序

struct node
{
 int  data;     //用来存放数据
 struct node * next;   //指向struct node结构体指针
};


struct node * create_list(); //函数声明, 这个函数用来创建链表
void tra_list(struct node *); //函数声明, 这个函数用来输出链表中的值


int main(void)
{
 struct node * phead;  //定义一个指向struct node结构体的指针用来存放
        //create_list的返回值
 phead = create_list();  //调用函数

 tra_list(phead);   //调用输出函数, 参数为头结点
 
 return 0;
}

//*******************************create_list()函数*****************************************************

struct node * create_list()

 int len;    //用来存放链表的个数
 int val;    //用来存放用户所输入的数据
 
 struct node * phead; //头结点
 struct node * pend;  //我们定义一个结构体指针pend, 让它始终都指向最后一个节点
 
 struct node * pnew;  //用于新开辟的链表
 
 phead = (struct node *)malloc(sizeof(struct node));
 
 if(pnew == NULL)
 {
  printf("内存空间分配失败, 程序将要退出!\n");
  exit(-1);  //分配空间失败, 程序异常终止
 }
 
 pend = phead;   //刚开始时, 头结点与pend都指向同一个结构体, 一个不存放数据的结构体
 
 pend->next = NULL;  //防止当输入的链表个数是0个时
 
 printf("请输入你要创建的链表的个数: ");
 scanf("%d", &len);
 
 //动态存放所输入的数据
 
 for(int i = 0; i < len; ++i)
 {
  printf("请输入第%d个链表中的数据: ", i+1);
  scanf("%d", &val);
  
  //输入了数据, 那就要用链表来存放
  //生成一个链表, 用来存放val的值
  
  pnew = (struct node *)malloc(sizeof(struct node)); //分配空间来存放val
  
  if(pnew == NULL)
  {
   printf("内存空间分配失败, 程序将要退出!\n");
   exit(-1); 
  }
  
  pnew->data = val;  //用来存放输入的数值
  
  //当链表创建还没有结束时, 再执行下面的代码, 用来创建新的链表
  pend->next = pnew;
  pnew->next = NULL;
  pend = pnew;  //这三行代码, 能让pend一直都是指向最后一个链表
      
 }
 
 return phead; //返回头结点, 这个结点不存放任何数据, 目的是为了方便控制链表
 
}

//*************************************void tra_list()函数*****************************************

void tra_list(struct node * phead)
{
 struct node * p;
 p = phead->next; //使p指向头结点指向的第一个节点

 if (p == NULL)
 {
  printf("链表为空, 没有可打印的数据!\n");
  exit(0); //正常终程序
 }

 while(p != NULL) 
 {
  printf("%d  ", p->data);
  p = p->next;
 }

 printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值