链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。说到这里你应该就明白了,链表就如同车链子一样,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。

作为有强大功能的链表,对他的操作当然有许多,比如:链表的创建,修改,删除,插入,输出,排序,反序,清空链表的元素,求链表的长度等等。

初学链表,一般从单向链表开始

--->NULL

head

这是一个空链表。

---->[p1]---->[p2]...---->[pn]---->[NULL]

head p1->next p2->next pn->next

有n个节点的链表。

创建链表

typedef struct student{

int score;

struct student *next;

} LinkList;

一般创建链表我们都用typedef  struct,因为这样定义结构体变量时,我们就可以直接可以用LinkList  *a;定义结构体类型变量了。

初始化一个链表,n为链表节点个数。

LinkList *creat(

int n){

LinkList *head, *node, *end;

//定义头节点,普通节点,尾部节点;

head = (LinkList*)malloc(

sizeof(LinkList));//分配地址

end = head;

//若是空链表则头尾节点一样

for (int i = 0; i < n; i++) {

node = (LinkList*)malloc(

sizeof(LinkList));

scanf(

"%d", &node->score);

end->next = node;

end = node;

}

end->next =

NULL;//结束创建

return head;

}

修改链表节点值

修改链表节点值很简单。下面是一个传入链表和要修改的节点,来修改值的函数。

void change(LinkList *list,int n) {//n为第n个节点

LinkList *t = list;

int i = 0;

while (i < n && t != NULL) {

t = t->next;

i++;

}

if (t != NULL) {

puts(

"输入要修改的值");

scanf(

"%d", &t->score);

}

else {

puts(

"节点不存在");

}

}

删除链表节点

删除链表的元素也就是把前节点的指针域越过要删除的节点指向下下个节点。即:p->next = q->next;然后放出q节点的空间,即free(q);

void delet(LinkList *list, int n) {

LinkList *t = list, *

in;

int i = 0;

while (i < n && t != NULL) {

in = t;

t = t->next;

i++;

}

if (t != NULL) {

in->next = t->next;

free(t);

}

else {

puts(

"节点不存在");

}

}

插入链表节点

我们可以看出来,插入节点就是用插入前节点的指针域链接上插入节点的数据域,再把插入节点的指针域链接上插入后节点的数据域。根据图,插入节点也就是:e->next = head->next;  head->next = e;

增加链表节点用到了两个结构体指针和一个int数据。

void insert(LinkList *list, int n) {

LinkList *t = list, *

in;

int i = 0;

while (i < n && t != NULL) {

t = t->next;

i++;

}

if (t != NULL) {

in = (LinkList*)malloc(sizeof(LinkList));

puts(

"输入要插入的值");

scanf(

"%d", &in->score);

in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点

t->next =

in;//填充t节点的指针域,把t的指针域重新指向in

}

else {

puts(

"节点不存在");

}

}

输出链表

输出链表很简单,边遍历边输出就行了。

while (h->next != NULL) {

h = h->next;

printf(

"%d ", h->score);

}

c语言链表next报错,C语言链表 - osc_w5x85e9u的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. gogs mysql 报错_Gogs服务搭建 - osc_2ltf3y0p的个人空间 - OSCHINA - 中文开源技术交流社区...

    Gogs 安装教程(最简单版) 简介 Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支 ...

  2. mysql5.7刷脏报错_mysql5.7安装 - osc_136ia3e6的个人空间 - OSCHINA - 中文开源技术交流社区...

    12配置文件 [client] port=3306socket=/data/mysql/run/mysql.sock [mysqld] pid-file = /data/mysql/run/mysql ...

  3. json解析嵌套jasn语句报错_jasn语法小记 - hiwill的个人空间 - OSCHINA - 中文开源技术交流社区...

    json是JavaScript对象表示法,是轻量级的文本数据交换格式,独立于编程语言,具有自我描述性,更易理解. json是有层级结构的纯文本,易读,可通过JavaScript进行解析. 语法: 1, ...

  4. c语言问答题斐讯通信,C总结-part_1 - LinearLaw的个人空间 - OSCHINA - 中文开源技术交流社区...

    1_C语言概述 1.库引用 1.1.几个例子 例1,调用系统指令 // b.c #include int main(void) { // system函数,相当于在命令行界面中输入对应的命令 syst ...

  5. 直白点理解c 语言中的循环体,反射机制 小小谈 - osc_nnbkiac5的个人空间 - OSCHINA - 中文开源技术交流社区...

    反射机制(Reflection) [TOC] 写在前面 本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11082012.html 这里是Oberon 本文 ...

  6. c语言 开辟复数指针数组,指针和数组 - llwwzz的个人空间 - OSCHINA - 中文开源技术交流社区...

    指针的几个要点: 一 指针的定义,赋值 要区分: int a; int *p = &a; 这是定义的时候初始化,即赋值 ======================= int a; int * ...

  7. c语言switch判断星座,通过日期计算星座 - osc_d41sfzmu的个人空间 - OSCHINA - 中文开源技术交流社区...

    分析和理解根据日期计算星座函数 起始月份 号数 星座 结束月份 号数 时间区间 12 22 摩羯座 1 19 12/22 - 1/19 1 20 水瓶座 2 18 1/20 - 2/18 2 19 双 ...

  8. %20ld c语言,C语言第二次实验报告 - osc_ldea7g3t的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.实验题目,设计思路,实现方法 第十一次作业(二维数组): 11-5 打印杨辉三角(20 分) 本题要求按照规定格式打印前N行杨辉三角. 输入格式: 输入在一行中给出N(1≤N≤10). 输出格式: ...

  9. c语言用正数的形式求最大值最小值,C语言-进制 - 盘盘的灰灰的个人空间 - OSCHINA - 中文开源技术交流社区...

    a. 如果文件路径我们使用双引号引起来. #include "1.txt" -> 先去当前源文件所在的目录中查找这个文件.如果有,直接包含. -> 如果没有,就去系统自 ...

  10. java sql报错不能catch_java异常(转) - osc_ioa3fr1w的个人空间 - OSCHINA - 中文开源技术交流社区...

    Throwable(所有error和exception的父类:超类) Java将错误变成对象交给异常处理机制 Error(仅靠程序本身无法恢复的严重错误) 一般是环境的问题,JVM的问题,并非程序的问 ...

最新文章

  1. mysql修复坏表的方法
  2. 2019互联网大厂的月饼哪家强?
  3. nodejs项目npm start背后的工作原理
  4. 如何修改服务器mac地址,如何修改服务器mac地址
  5. 交通大数据应用细分_盈海科技 | 交通大数据可视化“掘金”数据价值
  6. 肉体之爱的解释圣经_可以解释的AI简介,以及我们为什么需要它
  7. 打印图形(内测第1届第1题)
  8. Safari浏览器Session问题
  9. 火狐无法安装扩展_立即安装4个Firefox扩展
  10. 【愚公系列】2022年04月 微信小程序-实时音视频播放
  11. QT + OpenCV 使用摄像头
  12. OC5022B内置MOS的开关降压型恒流驱动芯片
  13. 《AI·未来》 ---- 读书笔记
  14. phpstorm误删文件恢复
  15. 页码在html中怎么设置,如何设置网页打印的网址、日期、页码等?
  16. 好用的linux分屏软件tmux安装及使用
  17. 仅限中国:AMD推出Radeon RX 560 XT
  18. [tcpreplay] tcpreplay高级用法--使用tcpreplay-edit进行循环动态发包
  19. Android 11 变更及适配攻略
  20. surfacepro3运行C语言,终于等来USB-C接口!微软 发布 Surface Pro 7 与 Surface Laptop 3 笔记本电脑...

热门文章

  1. 基于区块链的数字藏品管控方案
  2. 回忆我的过去一年2020年考研以及研究生规划
  3. java进行多个照片合并操作
  4. 蝴蝶效应,青蛙现象,鳄鱼法则,鲇鱼效应,羊群效...
  5. 如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
  6. 如何进入bios设置U盘启动的教程,如何在bios设置u盘启动项
  7. C++跟C#获取电脑上连接的多个摄像头名称与编号
  8. 分布电容和杂散电容_分布电容
  9. linux lilo命令,lilo命令_Linux lilo 命令用法详解:安装核心载入开机管理程序
  10. vue-学生的最爱抽签点名器