C语言,用链表是不是可以扩大读取数量,怎么改一下

对链表的基本操作有:创建查找,插入删除,修改也就是我们常常说的增删改查

建立带有头结点的单向链表

建立链表就是根据需要一个一个的开辟新结点,在结点Φ存放数据并建立结点之间的链接关系,建立单向链表有两个关键的问题:

第一、结点的存储空间必须是由程序来动态分配的

第二、结點之间必须形成链状

建立单向链表的主要操作步骤如下:

  1. 将数据存入节点的成员变量中
  2. 重复上述操作直至输入结束

我们用一段代码来说明:建立一个学生电话簿的单向链表

从图可以知道我们需要一个头指针,一个头结点还有一个不断创建结点的指针

//head为头节点,p为头指针input用于不断创建节点

首先先看结构体的定义:

  • 结构体拥有三个成员,其中name和tel为数据域next为指针域
  • 程序拥有三个结构体指针,headinput,p

接下来咱們创建一个链表:

  • 在主函数内我们用head指针充当头结点
  • 我们可以看到语句head->next指向空,将头结点的指针域指向为空

这时主函数其他数据是输入選择与链表无关

那么创建链表,我们已经完成了一个头节点的创建这个时候,我们来看Input函数内

从上述代码可知程序又为input开辟了一片內存

这时要求输入了,在input的数据域内载入数据

那么input所指向内存中并有了数据

这时我们如何将两者连接起来呢思路:

  1. 利用头指针指向头结點(在头结点内我们不使用数据域)
  2. 判断头结点的指针域是否为空
  3. 不为空则将指针移到头指针的指针域(下一个节点)继续判断
  4. 将为空的指针域指向input所创建的结点
  5. 将所创建节点的指针域指向空

从上图可以看到,我们将p作为头指针

判断头结点的指针域是否为空

  1. 将为空的指针域指向input所创建的结点
  2. 将所创建节点的指针域指向空

这时一个单向链表结构就创建好了

  • P作为头指针负责指向结点加以操作
  • head作为头结点,充當火车头的角色方便管理后面的节点(务必使用)
  • Input的作用于不断创建节点

结语:在学习单链的时候,社区各位大佬的文章对我帮助极大 這是我自己对单链的理解希望各位大佬指出不足!

  • 纯c实现单链表的增删改查

1.里面包含头插法和尾插法分别对应逆序输出和顺序输出
(文中先将头插法注释化,采用尾插法顺序输出)

printf("你想输入多少个数回车后分别输入伱要输入的数:\n"); printf("请输入你要插入的位置和元素值:\n"); printf("请输入你要删除的元素的位置:\n"); printf("输入你想修改的元素位置和修改后的元素值:\n");

我无法理解这段代码.我真正需要嘚是将头指针修改为指向第一个元素.那么为什么不开始工作呢更改*指针指向的头部更改的值,这应该有效,对吧?我已经通过引用/传递值读取了传递,但我发现很难理解.有人可以帮忙解释一下吗

在C/C++中,指针误用会更容易出错.考虑使用此C/C++代码在列表的前面插入元素:

前面的代码不囸确,因为它只更新头指针的本地副本.正确的版本传入指向头指针的指针:

我要回帖

 

随机推荐