小白的数据结构学习之旅

**

1.1线性表的建立

**
刚开始学习的时候也找了很多相关资料,但发现看的时候好像是懂了,但实际写的时候总感觉很纠结。不多说,先来看看线性表的解释吧.
在这里插入图片描述
1. 线性表的实现首先需要结构体
不了解结构体的查看此处链接
这里例如此结构体

typedef struct student{
 int num;//学生编号 
 char name[20];//学生姓名 
 int age;//学生年龄
 char sex;//f:女性 m:男性
 struct student *next;
}stu,*stu1;
stu1 Head=NULL;
stu1 p1,p2;

它定义了两个变量,p1,p2,这两个变量在经过空间开辟后就是如同图1-1的那样,一部分位存储数据所用,即1-2图中的学生编号,姓名等,还有一部分就是存放指针的区域,即指针域;

2.怎样创建变量并连接它们呢?
先上段代码

 if(Head==NULL)
  { 
   p1=(stu1)mallco(sizeof(stu));
   p2=(stu1)malloc(sizeof(stu));
   Head=p1;
   p2=p1;
  }
   else
  {
   p1=(stu1)mallco(sizeof(stu));
   p1=p2->next;
   p2=p1;
  }
  1. p1=(stu1)malloc(sizeof(stu));此句是在为变量p1开辟空间,因为指针型变量默认开辟4个空间,如果没有此句,则你的变量里是没有如同你的结构体定义的那样的空间分配的;

  2. p1开辟空间后你就可以为其中输入数据,一个数据已经创建完毕,如果想再创建数据怎么办呢,此时只有p1,p2两个变量,为什么却能创建许多数据呢?

  3. 讲清楚这个问题先要明确几点
    1.——p1的地址和p1->next的地址是不同的,
    2.——每执行一次(stu1)malloc(sizeof(stu)),就会分配一个新的地址,不是不变的

    在2中你创建好了一个数据后,假如再执行一次p1=(stu1)malloc(sizeof(stu))语句,此时p1重新拥有了一个新的地址,新的空间,我们称它为数据2号,那原来的数据就遗失了,所以我们要在创建新的 p1 前,要记录它,怎么记录呢?

  4. 此时我们在第2步创建完p1后,紧接着创建p2,即
    p1=(stu1)mallco(sizeof(stu)); p2=(stu1)malloc(sizeof(stu));
    然后使p2指向p1,即
    p2=p1;
    然后再向p1中输入数据,接着再进行第3步,创建新的p1,然后此时我们会发现,即使你的p1变了,但由于你的p2指向p1,所以依旧可以通过p2找到你已经创建好的p1的数据

  5. 链表,顾名思义,你要把你创建的数据链起来,才是链表,怎么把数据链起来呢?即有如下操作
    p2->next=p1;
    使p2的下一个节点指向p1的地址,这样你通过第1个数据的next就可以找到你新创建的节点2号了,此时你在2号节点中输入数据,再次记录2号的数剧即有
    p2=p1;

  6. 经过这样一步步你就可以创建许多数据了,当你创建完所有数据后,你会发现此时你的p1,p2都在距离1号数据很远的地方,当我们想查看第一个数据或者寻找其他数据就会变得比较麻烦,此时怎么解决呢?

  7. 在这里我们就可以了解到Head的作用了,首先定义Head变量,并使其为NULL;stu1 Head=NULL;然后使Head指向p1即Head=p1;这样即使你的p1,p2离1号有千里远,通过Head你还是可以轻松地找到1号数据了。

以上就是链表建立的过程,新手路过,欢迎大家指出错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值