比较插入,删除的定位条件

插入:要插入第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); }

运行结果:

线性链表头插法,插入,删除操作(完整代码)相关推荐

  1. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  2. 6-23 分离链接法的删除操作函数 (20 分)

    试实现分离链接法的删除操作函数. 函数接口定义: bool Delete( HashTable H, ElementType Key ); 其中HashTable是分离链接散列表,定义如下: type ...

  3. 分离链接法的删除操作函数

    习题5.11 分离链接法的删除操作函数 (20 分) 试实现分离链接法的删除操作函数. 函数接口定义: bool Delete( HashTable H, ElementType Key ); 其中H ...

  4. 数据结构与算法-单向链表的修改和删除操作

    单向链表的修改和删除操作 单向链表的修改 单向链表的删除 单向链表的修改 在上面的代码基础上定义几个英雄 HeroNode hero1 = new HeroNode(1,"宋江", ...

  5. 链栈常规插入删除操作

    #include <stdio.h> #include <stdlib.h> typedef int DataType; struct Node {DataType data; ...

  6. 单向链表 头插法尾插法

    链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个结点里存到下一个结点的地址.链表在存储数据结构的内存中有两块区域.一块区域用来存 ...

  7. jdk1.7HashMap链表头插法导致的死循环

    jdk1.7的HashMap的源码分析参考我之前整理的HashMap,之前也有整理头插法导致的死循环,这里再整理一下.参考连接 扩容的核心源码如下: void transfer(Entry[] new ...

  8. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...

    #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...

  9. C语言实现单链表头插法

    //链表结构 //a是数据域 //node是指针域 //typedef是结构体简化语句 //node用于后面初始化空间的时候取结构体的占用空间大小 //listnode是整个链表的头指针指向,即指向链 ...

  10. 不带头结点建立单链表(头插法、尾插法)

    #include<iostream> using namespace std; #include<stdlib.h> typedef int ElemType; typedef ...

最新文章

  1. 【工具】PlatformIO终于能用了,arduino大型项目开发环境PIO,编辑器+编译器+调试全功能...
  2. 【机器学习】为什么GBDT可以超越深度学习
  3. vscode打开一个文件就会关闭一个文件
  4. lvm硬盘管理及LVM扩容
  5. 白话machine learning之Loss Function
  6. 2-常见机器学习模型总结
  7. 关于路由器和交换机的区别图解(总结)
  8. 阿里巴巴字体图标库使用及更新方法
  9. 联通HG8347R WO-36光猫 当前用户不允许登录解决办法
  10. c# forbidden.html,403 Forbidden错误的浏览器行为
  11. 2017ICPCECIC MJF wants to work
  12. linux修改分辨率的命令,linux修改分辨率(命令)
  13. kali2021.1安装pdtools挤牙膏式爬坑日记
  14. AtCoder Beginner Contest 171 C.One Quadrillion and One Dalmatians
  15. JSM jQuery插件开源
  16. 8通道CAN FD,更强大的数据记录仪GL3400
  17. 使用计算机VLOOKUP函数需注意什么,vlookup函数怎么用-vlookup函数使用方法介绍 - Iefans...
  18. 操作系统第二章进程的描述与控制
  19. 大潜能:如何借助他人的力量获得成功
  20. 系列三:最全微商城营销36计!

热门文章

  1. 64位java没有javaw.exe_javaw.exe路径错误导致eclipse无法启动
  2. linux编辑乱码华为光猫,华为光猫修改双模、SN序号、MAC地址方法
  3. vue 点击文字input_Vue实现点击按钮复制文本内容
  4. 【标准正态分布查询表】
  5. AlexNet-深度卷积神经网络(CNN卷积神经网络)
  6. 基于Java医院网上预约挂号系统设计与实现(含源代码)
  7. 卡尔曼滤波算法-Matlab仿真
  8. python爬虫框架论文开题报告范文_论文开题报告框架
  9. mysql jemalloc_MySQL性能测试--jemalloc内存管理
  10. 怎样用捷速PDF编辑器修改PDF文档