目录

一、链表的概念

二、链表代码实战

2.1链表的输出

2.2输出链表的节点个数,查找链表中是否有某个数据

2.3链表从指定节点的后方插入新节点

2.4链表从指定节点前方插入新节点

2.5链表删除指定节点

2.6头插法创建链表(free函数要包含头文件stdlib.h)

2.7尾插法创建链表


一、链表的概念

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

二、链表代码实战

首先定义一个结构体

struct Test{int data;struct Test *next;
};

注:在进行头插法、尾插法创建链表之前,均是静态链表。

2.1链表的输出

void printLink(struct Test *head)//将整个链表打印输出
{struct Test *p = head;while(p != NULL){printf("%d ",p->data);p = p->next;}putchar('\n');
}int main()
{struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;printf("使用链表将数据输出\n");printLink(&t1);return 0;
}

2.2输出链表的节点个数,查找链表中是否有某个数据

int printNodeNum(struct Test *head)//输出链表的节点个数
{int num = 0;struct Test *p = head;while(p != NULL){num++;p = p->next;}return num;
}int searchNode(struct Test *head,int data)//查找链表中是否有某个数据
{struct Test *p = head;while(p != NULL){if(p->data == data){return 1;}p = p->next;}return 0;
}int main()
{struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;int num = printNodeNum(&t1);printf("链表节点个数:%d\n",num);int target;printf("请输入你想要查找的数据\n");scanf("%d",&target);int ret = searchNode(&t1,target);if(ret == 1){printf("有%d这个数\n",target);}else{printf("没有%d这个数\n",target);}return 0;
}

2.3链表从指定节点的后方插入新节点

void insertBehindNode(struct Test *head,int data,struct Test *new)//从节点后方插入新节点
{struct Test *p = head;while(p != NULL){if(p->data == data){new->next = p->next;p->next = new;}p = p->next;}
}int main()
{struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;printf("使用链表将数据输出\n");printLink(&t1);struct Test new = {100,NULL};printf("从后方插入新节点之后的链表\n");insertBehindNode(&t1,5,&new);printLink(&t1);return 0;
}

2.4链表从指定节点前方插入新节点

struct Test *insertFrontNode(struct Test *head,int data,struct Test *new)//从节点前方插入新节点
{struct Test *p = head;if(p->data == data){new->next = head;return new;}while(p->next != NULL){if(p->next->data == data){new->next = p->next;p->next = new;printf("有这个节点\n");return head;}p = p->next;}printf("没有这个节点\n");return head;
}
int main()
{struct Test *head = NULL;struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;head = &t1;printf("使用链表将数据输出\n");printLink(head);struct Test new = {100,NULL};printf("从后方插入新节点之后的链表\n");insertBehindNode(head,5,&new);printLink(head);struct Test new2 = {101,NULL};printf("从前方插入新节点之后的链表\n");head = insertFrontNode(head,1,&new2);printLink(head);return 0;
}

2.5链表删除指定节点

/*创建的是静态链表,并且没有malloc开辟地址空间,垃圾节点不能使用free进行删除,否则会出现段错误*/
struct Test *deletNode(struct Test *head,int data)//删除节点
{struct Test *p = head;if(p->data == data){head = head->next;return head;}while(p->next != NULL){if(p->next->data == data){p->next = p->next->next;return head;}p = p->next;}return head;
}int main()
{struct Test *head = NULL;struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;head = &t1;printf("使用链表将数据输出\n");printLink(head);printf("删除节点\n");head = deletNode(head,5);printLink(head);return 0;
}

2.6头插法创建链表(free函数要包含头文件stdlib.h)

*头插法创建链表*/
struct Test *insertInHead(struct Test *head,struct Test *new)
{if(head == NULL){head = new;}else{new->next = head;head = new;}return head;
}struct Test *creatLink(struct Test *head)
{struct Test *new = NULL;while(1){new = (struct Test *)malloc(sizeof(struct Test));printf("请输入你想要插入的数据,输入0时表示结束:\n");scanf("%d",&new->data);if(new->data == 0){printf("0 quit\n");free(new);return head;}head = insertInHead(head,new);}
}int main()
{struct Test *head = NULL;head = creatLink(head);printLink(head);return 0;
}

2.7尾插法创建链表

/*尾插法创建链表*/
struct Test *insertBehind(struct Test *head,struct Test *new)
{struct Test *p = head;if(head == NULL){head = new;return head;}while(p->next != NULL){p = p->next;}p->next = new;return head;
}struct Test *creatLink(struct Test *head)
{struct Test *new = NULL;while(1){new = (struct Test *)malloc(sizeof(struct Test));printf("请输入你想要插入的数据,输入0时表示结束:\n");scanf("%d",&new->data);if(new->data == 0){printf("0 quit\n");free(new);return head;}//head = insertInHead(head,new);head = insertBehind(head,new);}
}int main()
{struct Test *head = NULL;head = creatLink(head);printLink(head);return 0;
}

C语言:链表学习总结相关推荐

  1. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...

    [摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...

  2. 计算机二级c在哪里学习,2017年计算机二级C语言考点学习

    2017年计算机二级C语言考点学习 学习是把知识能力思维方法等转化为你的私有产权的重要手段,是"公有转私"的重要途径.以下是百分网小编整理的2017年计算机二级C语言考点学习,欢迎 ...

  3. oc语言和c语言,C语言及OC语言初期学习心得

    2015-7-22,周三 经过一个星期C语言的学习,对基础知识语法已经有了一定的了解和认识.同时通过这三天对OC语言的学习,更加了解编程语言都是相融相通的.虽然 OC语言的语法和之前接触的C,JAVA ...

  4. java用链表做学生系统_C语言链表实现学生管理系统

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include #include usin ...

  5. c语言用户自己建立数据类型,C语言程序设计学习笔记--用户建立数据类型

    C语言程序设计学习笔记--用户建立数据类型. 9.1定义和使用结构体变量 1.定义:C语言允许用户自己建立不同类型数据组合成的组合型数据类型就是结构体 2.形式: struct 结构体名 { 成员表列 ...

  6. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  7. EDA实验课课程笔记(四)——TCL脚本语言的学习2

    EDA实验课课程笔记(四)--TCL脚本语言的学习2 控制流 if 循环命令 while for foreach break和continue命令 switch source 过程(procedure ...

  8. EDA实验课课程笔记(三)——TCL脚本语言的学习1

    本文参考资料为<Tcl语言教程>,感谢作者的分享,这里仅仅作为简单常用语法的入门,若有需要后期对本文进行添加补充. EDA实验课课程笔记(三)--TCL脚本语言的学习 前言(TCL综述) ...

  9. 飞机订票系统c语言大作业,C语言知识学习飞机订票系统

    C语言知识学习飞机订票系统 课程设计 课程:数据结构 专业班级:xx软件工程 xx班 姓名:xx 学号:xxx 姓名:xxx 学号:xxx 设计时间:xxx 指导老师:xxx 课程设计题:飞机订票系统 ...

  10. c语言ktv点歌系统链表,C语言链表实现歌手评分系统

    本文实例为大家分享了C语言链表实现歌手评分系统的具体代码,供大家参考,具体内容如下 此程序可以添加文件操作用于保存歌手得分等信息,此程序实现了链表的增删查和链表冒泡排序交换节点功能 #include ...

最新文章

  1. 2022-2028年全球与中国氢碘化物市场智研瞻分析报告
  2. BERT的成功是否依赖于虚假相关的统计线索?
  3. FZU 1686 神龙的难题(DLX反复覆盖)
  4. xcode7 打开工程错误 This Document requires xcode8.0 or later.
  5. token,session,cookie
  6. MEC — 安全策略
  7. c语言行列式源代码,新手作品:行列式计算C语言版
  8. python super()
  9. 360html5播放加速,总结:没有讨论加速问题,“视频快速观看”完全支持360种浏览器...
  10. U盘、移动硬盘不格式化制作启动盘
  11. 21天学通Java 下载参考
  12. 篮球c语言程序,源程序C代码:篮球比赛应用系统
  13. android webview 本地视频播放,javascript – Android WebView不允许加载本地视频文件
  14. 五级自动驾驶分级_关于确保自动驾驶汽车安全的五件事
  15. 6款原型产品设计软件
  16. Word文档恢复,电脑突然关机 如何一步步将.asd恢复为Word文档 (详解)
  17. DeepLab V1模型原理
  18. 图像处理 - 打开图片
  19. 支付宝,你在憋什么大招?
  20. CCNP路由实验之八 路由重发布

热门文章

  1. 收集Qt支持的emoji表情-第五弹
  2. RoboMaster机甲大师赛,弹药箱识别定位算法效果图
  3. 飞利浦43php5292,说说使用感受飞利浦43PFF5292T3质量如何?分析怎么样?爆料真实使用心得...
  4. 微信小程序-image图片显示
  5. UVM学习笔记—前门访问/后门访问
  6. 如何阅读专业外文文献
  7. python爬视频下载_爬虫 | Python下载m3u8视频
  8. 数字机顶盒的出现,未来mos管的市场应用还能走多远?
  9. python初级编写:身份认证系统
  10. JAVA毕业设计健康医疗预约系统计算机源码+lw文档+系统+调试部署+数据库