C语言:链表(动态)创建之头插法和尾插法
目录
1.链表的增删查需要注意的一些易错点:
2.头插法(动态):
3.尾插法(动态):
1.链表的增删查需要注意的一些易错点:
链表增删查改超详细博客,还附带图画
https://www.cnblogs.com/yellowgg/p/8058857.html#top
尾插法(动态创建)--视频
https://www.bilibili.com/video/BV1x7411R7pt
头插法(动态创建)--视频
https://www.bilibili.com/video/BV157411Z7dc/?spm_id_from=333.788.recommend_more_video.-1
- 对于链表的使用,要时时刻刻注意头节点,如果头节点发生变化,返回的值错误,则链表会出错。
- 对于新节点的插入连接,连接顺序绝对不能乱。
- 删除节点,新增节点的话,则需要注意,是否有malloc开辟的空间被遗弃,有的话,要free掉。因为节点被遗弃成了无用节点后,内存中就多了它这个垃圾。
下面是从中间插入节点连接图:
2.头插法(动态):
特点:
1.1每一次添加的新节点就是一个新的链表头。
1.2数据的遍历是从输入的最后一个读起。
#include <stdio.h>
#include <stdlib.h>struct Link
{int data;struct Link *next;
};void printLink(struct Link* head)
{struct Link* p = head;while(p != NULL){printf("%d ",p->data);p = p->next;} putchar('\n');
}struct Link* insertFromHead(struct Link *head,struct Link *new) //真正的插入
{ if(head == NULL){head = new;return head;}else{new->next = head;head = new;} return head;
}struct Link* createLink(struct Link *head) //创建链表
{struct Link *new = NULL;while(1){printf("input your new node data:\n");new = (struct Link*)malloc(sizeof(struct Link));scanf("%d",&(new->data));if(new->data == 0){printf("0 quit\n");free(new); //如果第一次输入数据为0,则新节点new,malloc的空间没用,则free掉return head;}head = insertFromHead(head,new); }
}int main()
{struct Link *head = NULL;head = createLink(head);printLink(head); //打印链表 return 0;
}
3.尾插法(动态):
特点:
1.1要先遍历到最后一个,才接新节点。
1.2数据的遍历是从输入的第一个读起。
#include <stdio.h>
#include <stdlib.h>struct Link
{int data;struct Link *next;
};void printLink(struct Link* head)
{struct Link* p = head;while(p != NULL){printf("%d ",p->data);p = p->next;} putchar('\n');
}struct Link* insertFromBehind(struct Link *head,struct Link *new) //真正的插入
{ struct Link *p = head; if(p == NULL){head = new;return head;}while(p! =NULL){ p = p->next;}p->next = new;return head;
}struct Link* createLink(struct Link *head) //创建链表
{struct Link *new = NULL;while(1){printf("input your new node data:\n");new = (struct Link*)malloc(sizeof(struct Link));scanf("%d",&(new->data));if(new->data == 0){printf("0 quit\n");free(new); //如果第一次输入数据为0,则新节点new,malloc的空间没用,则free掉return head;}head = insertFromBehind(head,new); }
}int main()
{struct Link *head = NULL;head = createLink(head);printLink(head); //打印链表return 0;
}
C语言:链表(动态)创建之头插法和尾插法相关推荐
- c语言 链表建立头插法尾插法,单链表的创建(头插法和尾插法)
单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...
- c语言单链表的创建(头插法和尾插法)
概念: 单链表的建立: 头插法:元素插入在链表的头部,也叫做前插法. 尾插法:元素插入在链表的尾部,也叫做后插法. 头插法: 方法1: 步骤: 1)创建一个空链表(含头结点) 2)再创建一个需要插入的 ...
- 不带头结点的单链表的创建(头插法和尾插法)
1.用头插法建立不带头结点的单链表 #include<iostream> using namespace std;//单链表的结构体 typedef struct Node {int da ...
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...
- java实现单链表的建立(头插法和尾插法)
单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...
- 单链表的头插法和尾插法c语言实现
/*单链表的头插法和尾插法c语言实现*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...
- 头插法和尾插法创建链表(有无头结点)
头插法和尾插法创建链表(有无头结点) 文章目录 头插法和尾插法创建链表(有无头结点) 1 头插法 1.1头插法建表规则: 1.2 头插法建表代码实现 2 尾插法 2.1 尾插法建表规则: 2.2 尾插 ...
- 采用头插法和尾插法建立单链表
面说一下如果用C语言建立单链表,分为头插法和尾插法两种. 采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后 ...
- C语言的双向链表头插法和尾插法,指定节点删除
文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...
- 计算机软件技术 上海电力学院,上海电力学院 计算机软件技术 实验三 用头插法和尾插法创建线性表...
上海电力学院计算机软件技术实验三用头插法和尾插法创建线性表 #include #define MAXLEN 9 struct table {int key; int othererm; } ; typ ...
最新文章
- form表单序列化去除空值
- GitHub服务中断24小时11分钟事故分析报告\n
- 就业技术书文件表格_Word格式:工程预结算工作流程图及工作表单,附20余表格...
- RedHat Enterprise Linux6.4 使用CentOS yum源
- python 财务报表审计_python 自动化审计
- WORD 粘贴代码 不检查语法
- appium java简单实例_Appium创建一个Note的实例
- 计算机视觉三大顶级会议ICCV,CVPR,ECCV网址
- MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
- 九度OJ 1005 Graduate Admission
- 如何输入一个整数逆序输出_如何理解运算放大器的共模输入和输出摆幅限制?...
- JS获取当前时间戳的方法
- jdk Integer 具体实现
- 计算机网络基础问题总结
- Turtlebot2激光雷达(Rplidar)gmapping构建地图
- 软件工程团队项目——搜查令
- Jquery点击切换播放不同的Flv视频文件
- iOS 使用HealthKit框架实现获取今日步数
- yum命令执行卡住不能退出
- uni-app swiper实现公告栏上下循环滚动(整理)
热门文章
- 魔兽世界单机(芒果3.3.5a)机器人操作命令大全
- pdf合并 java_用Java拆分及合并PDF文档
- STM32F103+RTT从零开始(二)——RTT系统中点亮LED
- 对勾和叉怎么打_方框里打钩和叉符号怎么输入?N种方法,总有一种适合你!-word里面怎么打勾...
- Java-Swing编程介绍
- CFSSL: 证书管理工具:4:生成Kubernetes集群证书
- win10下cygwin安装
- 一起用Python做个自动化弹钢琴脚本,我竟然弹出了《天空之城》!
- 4.3 齐次线性方程组
- 在MySQL中设计新闻网站_基于MySQL新闻搜索引擎的设计与实现