线性链表头插法,插入,删除操作(完整代码)
比较插入,删除的定位条件
插入:要插入第i位前的位置,则p要找到插入前的第i-1位 。
在最后一位前插入,则p->next不存在。所以此处为p
while(p&&j<i-1) //p要找到 第i-1位 ,假如在4位前插入,第四位不一定存在 ,所以此处为p {p=p->next;j++; } if(!p||j>i-1)cout<<"查找错误";
删除:假如删除第4位,第四位一定存在 ,所以p->next一定存在 (p为第i-1位)
linklist p=l,q;while(p->next&&j<i-1)//假如删除第4位,第四位一定存在 ,所以p->next一定存在 {p=p->next;j++;}if(!(p->next)||j>i-1)cout<<"查找错误";
头插法:先建立一个带头结点的单链表
代码实现:
#include <stdio.h>
#include <iostream>
#include <malloc.h>
using namespace std;
typedef int status;
typedef int elemtype;
typedef struct LNode{elemtype data;struct LNode *next; //定义的*next为指向结构体LNode类型的指针
}LNode,*linklist; // *linklist相等于一个列表头指针,也是结构体类型 //逆位序插入n个元素的值,建立带表头结点的单链表
status createlist(linklist &l,int n)
{int i;
linklist p; l=(linklist)malloc(sizeof(linklist));l->next=NULL;//先建立一个带头结点的单链表 for(i=n;i>0;i--){p=(linklist)malloc(sizeof(linklist));//生成新结点 cout<<"请输入第"<<i<<"个数据:";cin>>p->data;p->next=l->next;l->next=p; } i=0;cout<<endl<<"输出链表:"; for(p=l->next;p!=NULL;p=p->next)cout<<p->data<<" ";cout<<endl<<endl;return 0;
}//插入结点
status listinsert(linklist &l,int i,elemtype e)
{//在链表l中的第i位前插入e
//在第i位前插入则要找到第i-1位 int j=0;linklist p=l,q;//q为插入结点 while(p&&j<i-1)//p要找到 第i-1位 ,假如在4位前插入,第四位不一定存在 ,所以此处为p {p=p->next;j++; } if(!p||j>i-1)cout<<"查找错误";q=(linklist)malloc(sizeof(linklist));q->next=p->next;p->next=q;q->data=e; cout<<"在第 "<<i<<" 位前插入 "<<e<<endl;cout<<"插入后:" <<endl; for(p=l->next;p!=NULL;p=p->next)cout<<p->data<<" ";return 0;
} //删除结点
status listdelete(linklist &l,int i,elemtype e)
{//将带头结点的单链表线性表l中,删除第i个结点,并将其值赋于e输出 int j=0;linklist p=l,q;while(p->next&&j<i-1)//假如删除第4位,第四位一定存在 ,所以p->next一定存在 {p=p->next;j++;}if(!(p->next)||j>i-1)cout<<"查找错误"; q=p->next;//q为要删除的结点e=q->data; p->next=q->next;//将待删除结点的前一个结点的指向改变 free(q); cout<<"删除第 "<<i<<" 位 "<<e<<endl; cout<<"删除后:"<<endl; for(p=l->next;p!=NULL;p=p->next)cout<<p->data<<" ";cout<<endl<<endl; return 0;
}int main()
{elemtype e,b=6;linklist l;createlist(l,5);listdelete(l,4,e);listinsert(l,5,b); }
运行结果:
线性链表头插法,插入,删除操作(完整代码)相关推荐
- 顺序表和单链表的插入删除操作时间复杂度的区别
顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...
- 6-23 分离链接法的删除操作函数 (20 分)
试实现分离链接法的删除操作函数. 函数接口定义: bool Delete( HashTable H, ElementType Key ); 其中HashTable是分离链接散列表,定义如下: type ...
- 分离链接法的删除操作函数
习题5.11 分离链接法的删除操作函数 (20 分) 试实现分离链接法的删除操作函数. 函数接口定义: bool Delete( HashTable H, ElementType Key ); 其中H ...
- 数据结构与算法-单向链表的修改和删除操作
单向链表的修改和删除操作 单向链表的修改 单向链表的删除 单向链表的修改 在上面的代码基础上定义几个英雄 HeroNode hero1 = new HeroNode(1,"宋江", ...
- 链栈常规插入删除操作
#include <stdio.h> #include <stdlib.h> typedef int DataType; struct Node {DataType data; ...
- 单向链表 头插法尾插法
链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个结点里存到下一个结点的地址.链表在存储数据结构的内存中有两块区域.一块区域用来存 ...
- jdk1.7HashMap链表头插法导致的死循环
jdk1.7的HashMap的源码分析参考我之前整理的HashMap,之前也有整理头插法导致的死循环,这里再整理一下.参考连接 扩容的核心源码如下: void transfer(Entry[] new ...
- c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
#define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...
- C语言实现单链表头插法
//链表结构 //a是数据域 //node是指针域 //typedef是结构体简化语句 //node用于后面初始化空间的时候取结构体的占用空间大小 //listnode是整个链表的头指针指向,即指向链 ...
- 不带头结点建立单链表(头插法、尾插法)
#include<iostream> using namespace std; #include<stdlib.h> typedef int ElemType; typedef ...
最新文章
- 【工具】PlatformIO终于能用了,arduino大型项目开发环境PIO,编辑器+编译器+调试全功能...
- 【机器学习】为什么GBDT可以超越深度学习
- vscode打开一个文件就会关闭一个文件
- lvm硬盘管理及LVM扩容
- 白话machine learning之Loss Function
- 2-常见机器学习模型总结
- 关于路由器和交换机的区别图解(总结)
- 阿里巴巴字体图标库使用及更新方法
- 联通HG8347R WO-36光猫 当前用户不允许登录解决办法
- c# forbidden.html,403 Forbidden错误的浏览器行为
- 2017ICPCECIC MJF wants to work
- linux修改分辨率的命令,linux修改分辨率(命令)
- kali2021.1安装pdtools挤牙膏式爬坑日记
- AtCoder Beginner Contest 171 C.One Quadrillion and One Dalmatians
- JSM jQuery插件开源
- 8通道CAN FD,更强大的数据记录仪GL3400
- 使用计算机VLOOKUP函数需注意什么,vlookup函数怎么用-vlookup函数使用方法介绍 - Iefans...
- 操作系统第二章进程的描述与控制
- 大潜能:如何借助他人的力量获得成功
- 系列三:最全微商城营销36计!
热门文章
- 64位java没有javaw.exe_javaw.exe路径错误导致eclipse无法启动
- linux编辑乱码华为光猫,华为光猫修改双模、SN序号、MAC地址方法
- vue 点击文字input_Vue实现点击按钮复制文本内容
- 【标准正态分布查询表】
- AlexNet-深度卷积神经网络(CNN卷积神经网络)
- 基于Java医院网上预约挂号系统设计与实现(含源代码)
- 卡尔曼滤波算法-Matlab仿真
- python爬虫框架论文开题报告范文_论文开题报告框架
- mysql jemalloc_MySQL性能测试--jemalloc内存管理
- 怎样用捷速PDF编辑器修改PDF文档