链表的建立

链表的建立

对于初学者来说,刚刚接触链表,可能会有点陌生,但你看完下面这篇博客后,你将豁然开朗,原来,链表是那么的简单。。。。。

买不买得起M4就看你们了!!!
在这里插入图片描述

注释都在代码里了。。。。

代码如下:

创建新的结点部分:

struct link *AppendNode(struct link *head)//函数功能:新建一个节点并添加到链表末尾,返回添加节点后的链表的头指针 
{
	 struct link *p=NULL,*pr=head;
	 int data;
	 p=(struct link *)malloc(sizeof(struct link));//让p指向新建结点(开辟空间) 
	 if(p==NULL) //若申请内存失败则退出程序 
	 {
		  printf("没有足够的内存分配!\n");
		  exit(0);
	 }
	 if(head==NULL)//若原链表为空表,则将新的节点设置为头节点 
	 {
	  	head=p;
	 }
	 else
	 {
	  	 while(pr->next!=NULL)//若未到表尾则移动到表尾 
		 {
		  	 pr=pr->next;//让pr指向下一个节点 
		 }
		 pr->next=p;//让末节点的指针域指向新建节点 
	 }
	 printf("输入节点数据:");
	 scanf("%d",&data);
	 p->data=data;//将新建节点的数据域赋值为输入的节点数据值
	 p->next=NULL;//将新建节点置为表尾 
	 return head; //返回添加节点后的链表的头指针 
	} 

这是显示结点部分:

void DisplyNode(struct link *head)
{
 struct link *p=head; 
 int j=1;
 	while(p!=NULL)//若不是表尾,则循环打印节点的值 
	 {
		 printf("%5d%10d\n",j,p->data);//打印第j个节点的数据 
	 	 p=p->next;//让p指向下一个节点 
	 	 j++;
	 }
 }

这是释放内存空间:

void  DeleteMemory(struct link *head)
{
 struct link *p=head, *pr=NULL; 
 while(p!=NULL)//若不是表尾,则释放节点占用内存 
	 {
	  pr=p;//在pr中保存当前节点指针 
	  p=p->next;//让p指向下一个节点 
	  free(pr);//释放pr指向的当前节点占用的内存 
	 }
}

这是主函数部分:

int main()
{
	 int i=0;
	 char c;
	 struct link *head=NULL;//建立一个头指针
	 printf("你想建立一个新的结点吗?(y/n)");
	 scanf("%c",&c);
	 while(c=='y'||c=='Y')
	 {
		  head=AppendNode(head);//添加节点
		  DisplyNode(head);//显示当前联链表中的各节点信息
		  printf("你想建立一个新的结点吗?(y/n)");
		  scanf(" %c",&c);
		  i++; 
	 } 
		 printf("%d个新的节点已被建立!\n",i);
		 DeleteMemory(head);//释放所有动态分配的内存 
	} //主函数结束 

其实链表的建立其实很简单,这里使用的是尾插法。开辟一个内存空间,作为头结点,然后移动指针,让指针指向末尾,继续开辟一个空间插到链表的末尾作为新插入的结点,用于下一个数据的储存(在每次建立结点前必须先将指针移动到链表的末尾!!!)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

betterlyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值