有关链表的初步理解:内含链表的尾加法

什么是链表

对链表的初步理解:链表,链表顾名思义:一条链状的表格,那么这一条链子又有什么特别的地方,这里就是重点:
1.首先这条链表的长度原则上是可以无限增加(前提是你的计算机又足够的内存),这里可以说链表最大的优势,这也是它和数组的最大区别,数组的长度是要事先定义好的,可链表不同,你要多少,它就可以给你多少,这里先粗劣讲讲链表的构成:链头+链节,首先我们要定义一个链头,然后通过mollac函数不断生成链节,并将这些链节,依次添加到链子上去,因为生成的链节数,又自己定义所以非常方便,至于具体的细节下面的代码中会详细给出
2.链子的每个链节乃至链头,其实都是特殊的结构体,特殊在这些结构体中都含有一个结构体指针,用来指向下一个链节,这就相当于为每个链节建立了联系,将分散的链节构成一条链子,想当于小朋友手拉着手了
3.既然每个连接都是结构体,那自然可以在生成连接的时候,对其进行编辑,储存信息,注意这些信息也非常重要,因为当形成链子后你想找出具体的某一个链节,就必须要通过这些信息来寻找,以上就是本人对链表的一些理解

话不多说,上代码:

#include <stdio.h>
#include <stdlib.h>//这里引入stdlib.h,因为下文要使用到malloc函数
struct student//定义一个学生类型的结构体
{
 int num;
 int age;
 struct student *next;//结构日内定义一个结构体指针用于连接连接链节
};
struct student* head=NULL;//定义链表的头部
void creatChain(struct student *pnew);//定义一个连接链节的函数
//为什么可以将函数定义为void的类型,因为我定义的head为全局变量
void sc();//定义一个输出各链节的函数
void main()
{
 int xh;
 struct student* p;
 printf("输入学生的学号(输入-1时停止输入):");
 scanf("%d", &xh);
 while(xh!=-1)//使用while循环不断生成链节,直到输入-1
 {
  if ((p = (struct student *)malloc(sizeof(struct student))) == NULL)
  {//使用动态函数malloc生成一个sizeof(struct student)大小的空间,并判断
  //计算是否又足够的空间,若能生成,将首地址赋给p
   free(p);
   break;
  }
  else
  {
   p->num = xh;//下面是完善各个链节的信息
   printf("输入学生的年龄:");
   scanf("%d", &(p->age));
   creatChain(p);//调用函数将生成的链节,添加到链子上去
  }
  printf("输入学生的学号(输入-1时停止输入):");
  scanf("%d", &xh);
 }
 sc();
}
void creatChain(struct student* pnew)//函数的具体操作
{
 struct student* p2;
 if (head == NULL)//判断是否有链头,若没有,将传递下来的链节作为链头
 {
  head = pnew;=//将传递下来的链节的地址作为连头
  pnew->next = NULL;//并使next指向NULL
 }
 else//若已经有了连头,则将链节添加到连头之后
 {
  for (p2 = head;p2->next!=NULL;p2 = p2->next)//找到链子最后一节所在的地址
  {
   
  }
  p2->next = pnew;//将传递下来的链节,添加到链子目前最后一节的后面
  pnew->next = NULL;//并使其指向NULL
 }
}
void sc()
{
 struct student* p;
 for (p = head;p!= NULL;p = p->next)//注意于上面找链子最后一节所在的区别
 {//这里每一各节点都要遍历到,因为要输出每个节点的信息
  printf("学号:%d  年龄:%d\n",p->num ,p->age );
 }
}

总结

要想学好链表结构体和指针一定要学好,希望大家都有所得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值