单链表(一)——链表的建立
来源:互联网 发布:吉林师范大学教务网络 编辑:程序博客网 时间:2024/04/30 09:31
建立单链表有两种方法:头插法和尾插法。
1、头插法建立单链表
1.1、基本思想
1.生成一个结点,将读入的数据存放到新结点的数据域中;
2.把新结点作为第一个表结点插到当前链表头结点之后,重复上述过程,直至输入结束标志为止。
1.2、头插法建立单链表的过程(示意图如下图所示)
1.建立链表的头结点head;
2.建立新的结点p;
3.给新节点的数据域赋值,将新结点的指针域指向head所指的结点;
4.将链表头结点head的指针域修改为新结点p;
5.重复2~4,直至输入结束标志为止。
1.3、算法实现
/********************************************************************** 函数名称:linklist *CreateLinklistHead()* 函数功能:利用头插法创建链表* 参 数:无* 返 回 值:创建完链表后的链表头结点* 说 明:无*********************************************************************/linklist *CreateLinklistHead(){int x, i, nodeNum;linklist *head, *temp; // 头结点与临时结点head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点head->next = NULL; // 给表头结点的指针域赋值printf("请输入链表中结点的个数:");scanf("%d", &nodeNum);for(i=1; i<=nodeNum; i++){printf("请输入第 %d 个结点的数据:", i);scanf("%d", &x);temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点temp->data = x; // 对新结点的数据域赋值// 将新结点插到头结点之后temp->next = head->next; head->next = temp;}return head; // 返回新建链表的头结点}
2、尾插法建立单链表
2.1、基本思想
1.生成一个结点,将读入的数据存放到新结点的数据域中;
2.把新结点作为第一个表结点插到当前链表尾结点之后,重复上述过程,直至输入结束标志为止。
2.2、尾插法建立单链表的过程(示意图如下图所示)
1.建立链表的头结点head;
2.建立新的结点p;
3.给新节点的数据域赋值;
4.将新结点链接到链表的尾结点rear之后,修改为指针rear;
5.重复2~4,直至输入结束标志为止。
2.3、算法实现
/********************************************************************** 函数名称:linklist *CreateLinklistRear()* 函数功能:利用尾插法创建链表* 参 数:无* 返 回 值:创建完链表后的链表头结点* 说 明:无*********************************************************************/linklist *CreateLinklistRear(){int x, i, nodeNum;linklist *head, *rear, *temp; // 定义头结点、尾结点和临时结点head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点,表头结点不存放数据head->next = NULL; // 将表头结点的指针域赋值为NULLrear = head; // 将表头结点赋值给表尾结点printf("请输入链表中结点的个数:");scanf("%d", &nodeNum);for(i=1; i<=nodeNum; i++){printf("请输入第 %d 个结点的数据:", i);scanf("%d", &x);temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点temp->data = x; // 新增结点的数据域temp->next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)rear->next = temp; // 使前一个结点指向新增结点(head->next=temp)rear = temp; // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head->next)}//rear->next = NULL; // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)return head; // 返回头结点}
0 0
- 单链表(一)——链表的建立
- TinyXML使用解析(一)——文件的建立
- lucene学习笔记(一)——索引的建立
- 全能的权限管理框架(一)——基础表的建立与说明
- 全能的权限管理框架(一)——基础表的建立与说明
- 数据结构第四周项目(一)——建立单链表
- 第四周项目一—建立单链表
- activity工作流学习笔记之(一)——23张表的建立
- 动态链表的建立—尾插法
- 数据结构系列之链表——单链表的建立
- ExtJS学点皮毛(一)——工程的建立和项目的运行
- 二叉树的建立基本操作(链表方式)(一)
- 开发ASP.NET博客的第四步——用VS2005建立解决方案(一)(转)
- git环境搭建(一)——gitolite的安装和管理员建立
- 译文:使用MVC5的Entity Framework 6入门(一)——建立一个EF数据模型
- 谈谈个人网站的建立(一)——建站历史和技术架构
- 谈谈个人网站的建立(一)——建站历史和技术架构
- 谈谈个人网站的建立(一)——建站历史和技术架构
- Spring面试问答
- Generate Parentheses
- 12个免费学习编程的网站
- 基于VTK的Android下的三维重建
- eclipse 搭建struts2框架 出现404错误
- 单链表(一)——链表的建立
- java6道基础问题
- PHP的foreach和其它循环的区别
- 任务调度--spring下的任务调度quartz
- JDBC中的Statement和PreparedStatement的区别
- Java中关于时间的学习日志
- 《剑指offer》孩子们的游戏(圆圈中最后剩下的数)
- c++字符串详解
- Android目录(更新中)