内容:
1)实现单链表的以下基本操作:建立单链表,查找单链表,插入单链表,删除单链表。
2)采用单链表结构编程实现:两个有序单链表的归并运算。

实现思路:
① 定义数据域类型;
② 定义单链表,分为数据域和指针域;
③ 分别编写实现前插法创建单链表、后插法创建单链表、初始化单链表、单链表的查找、向单链表插入元素、删除单链表中某元素、遍历单链表并显示、求单链表最大节点、判断单链表是否为空、求单链表长度、逆转单链表、两个有序单链表的归并等函数功能;
④ 在主函数中定义单链表;
⑤ 使用while实现循环操作,当输入指令小于等于0 退出;
⑥ 使用switch根据指令选项判断需要执行的指令(先创建单链表才可以进行后续操作);
⑦ 执行某些指令之前要先判空;
⑧ 接受退出指令退出;
⑨ 程序退出

程序实现:

#include <iostream>using namespace std;typedef struct LNode
{int data;struct LNode *next;
}LNode,*LinkList;void InitList(LinkList &L) //初始化单链表
{L=new LNode;L->next=NULL;
}LNode *LocateElem(LinkList L,int e)  //单链表的查找
{LNode *p=L->next;while(p && p->data!=e)p=p->next;return p;
}int ListInsert(LinkList &L,int i,int e) //单链表插入元素
{LNode *p=L;int j=0;while(p && j<i-1){p=p->next;j++;}if(!p || j>i-1)return 0;LNode *s=new LNode;s->data=e;s->next=p->next;p->next=s;return 1;
}int ListDelete(LinkList &L,int i) //单链表删除元素
{LNode *p=L;int j=0;while((p->next) && (j<i-1)){p=p->next;j++;}if(!(p->next) || j>i-1)return 0;LNode *s=new LNode;s=p->next;p->next=s->next;delete s;return 1;
}void CreateList_H(LinkList &L,int n) //前插法创建单链表
{InitList(L);for(int i=0;i<n;i++){LNode *p=new LNode;cout<<"请输入第"<<i+1<<"个元素:";cin>>p->data;p->next=L->next;L->next=p;}
}void CreateList_R(LinkList &L,int n) //后插法创建单链表
{InitList(L);LNode *r=L;for(int i=0;i<n;i++){LNode *p=new LNode;cout<<"请输入第"<<i+1<<"个元素:";cin>>p->data;p->next=NULL;r->next=p;r=p;}
}void PrintList(LinkList &L)  //遍历单链表并显示
{LNode *p=L->next;while(p){cout<<p<<"<=>"<<p->data<<endl;p=p->next;}}void ListMax(LinkList &L) //求单链表最大结点
{LNode *p=L->next;LNode *q=L->next;while(p){if(q->data<p->data){q=p;}p=p->next;}cout<<q<<"<=>"<<q->data<<endl;
}bool ListEmpty(LinkList &L) //判空
{if(L==NULL)return false;return true;
}int ListLength(LinkList &L) //单链表长度
{int l=0;LNode *p=L->next;while(p){l++;p=p->next;}return l;
}void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC) //有序链表归并
{LNode *pa=LA->next;LNode *pb=LB->next;LC=LA;LNode *pc=LC;while(pa&&pb){if(pa->data<=pb->data){pc->next=pa;pc=pa;pa=pa->next;}else{pc->next=pb;pc=pb;pb=pb->next;}}pc->next=pa?pa:pb;//delete LB;
}void nizhuan(LinkList &L)  //单链表逆转
{LNode *p=L->next;LNode *q=p->next;while(q){LNode *s=q->next;q->next=p;p=q;q=s;}L->next->next=NULL;L->next=p;cout<<"逆转之后的顺序为:"<<endl;PrintList(L);
}int main()
{LinkList L=NULL;cout<<"1 前插创建单链表"<<endl;cout<<"2 后插创建单链表"<<endl;cout<<"3 查找单链表"<<endl;cout<<"4 插入单链表"<<endl;cout<<"5 删除单链表"<<endl;cout<<"6 遍历单链表"<<endl;cout<<"7 查找单链表最大节点"<<endl;cout<<"8 单链表的长度"<<endl;cout<<"9 逆转单链表"<<endl;cout<<"10 两个有序单链表的归并"<<endl;cout<<"    输入小于等于0的指令退出程序!"<<endl;int ip;while(1){cout<<endl;cout<<"**********************************************************"<<endl;cout<<"请输入操作指令:"<<endl;cin>>ip;if(ip<=0)break;else{switch(ip){case 1:{cout<<"请输入单链表的长度:";int n;cin>>n;CreateList_H(L,n);break;}case 2:{cout<<"请输入单链表的长度:";int n;cin>>n;CreateList_R(L,n);break;}case 3:{if(ListEmpty(L)){cout<<"请输入要查找的数据:";int e;cin>>e;LNode *p=LocateElem(L,e);cout<<"查找的数据的地址为:"<<p<<endl;}else{cout<<"线性表为空!"<<endl;}break;}case 4:{if(ListEmpty(L)){cout<<"请依次输入插入数据的位置、插入的数据元素";int i,e;cin>>i>>e;int flag=ListInsert(L,i,e);if(flag==1)cout<<"插入成功!"<<endl;elsecout<<"插入失败!"<<endl;}else{cout<<"线性表为空!"<<endl;}break;}case 5:{if(ListEmpty(L)){cout<<"请输入要删除元素的位置:";int i;cin>>i;int flag=ListDelete(L,i);if(flag==1)cout<<"删除成功!"<<endl;elsecout<<"删除失败!"<<endl;}else{cout<<"线性表为空!"<<endl;}break;}case 6:{if(ListEmpty(L)){PrintList(L);}else{cout<<"线性表为空!"<<endl;}break;}case 7:{if(ListEmpty(L)){ListMax(L);}else{cout<<"线性表为空!"<<endl;}break;}case 8:{if(ListEmpty(L)){cout<<"单链表的长度为:"<<ListLength(L)<<endl;}else{cout<<"线性表为空!"<<endl;}break;}case 9:{if(ListEmpty(L)){nizhuan(L);cout<<"单链表逆转成功!"<<endl;}else{cout<<"线性表为空!"<<endl;}break;}case 10:{LinkList LA;LinkList LB;LinkList LC;InitList(LC);cout<<"请输入单链表LA的长度:";int n;cin>>n;CreateList_R(LA,n);cout<<"请输入单链表LB的长度:";cin>>n;CreateList_R(LB,n);cout<<"单链表LA的元素为:"<<endl;PrintList(LA);cout<<"单链表LB的元素为:"<<endl;PrintList(LB);cout<<endl;MergeList_L(LA,LB,LC);cout<<"单链表LC的元素为:"<<endl;PrintList(LC);break;}default:{cout<<"请输入正确的指令!"<<endl;break;}}}}return 0;
}

【数据结构】单链表的操作相关推荐

  1. 笔试面试常考数据结构-单链表常用操作编程实现

    单链表是笔试以及面试手写代码中常考的数据结构之一.下面实现了单链表的常见操作:创建单链表.删除节点.打印单链表(包括正向打印以及逆向打印).反转单链表.找出单链表的倒数第K个节点.合并两个有序单链表等 ...

  2. 数据结构单链表的基础操作(C语言)

    效果如图: 代码及详情如下:(文末总结) 目录 //主函数 //菜单 //创建链表 //插入结点 //删除结点 //查找结点 //链表长度 //打印链表 //清空链表 //逆置链表 //删除偶数元素结 ...

  3. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

  4. java实现单链表常见操作,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  5. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  6. C语言数据结构单链表链表

    数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...

  7. 数据结构——单链表(小白入门第二天)

    一.什么是单链表? 定义:每个结点 除了存放数据元素外,还要存储指向下一个节点的指针: 优点:不要求大片连续空间,改变容量方便: 缺点:不可随机存取,要耗费一定空间存放指针 局限性:无法逆向检索 二. ...

  8. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  9. 数据结构——单链表的C++实现

    数据结构--单链表的C++实现 \qquad单链表的创建.求长度.查找.插入和删除的C++实现. #include<iostream> using namespace std;//1.定义 ...

  10. php mysql 链表_浅谈PHP链表数据结构(单链表)

    链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...

最新文章

  1. 第八届蓝桥杯决赛 磁砖样式
  2. nginx怎么用_后端服务老是重启,前端该如何拯救自己?nginx的妙用
  3. phpize增加php模块
  4. 二、先在SD卡上启动U-boot,再烧写新的U-boot进Nandflash
  5. 破洞牛仔裤中的几何学:简单理解万有覆叠问题
  6. 实践案例丨基于Raft协议的分布式数据库系统应用
  7. Go设计模式之Factory
  8. dapper利用DynamicParameters构建动态参数查询
  9. Python ASCII码
  10. 夜深人静写算法(五)- 初等数论
  11. 挑战微软 + GitHub!谷歌联手 Replit,升级 AI 编程“神器”:曾拒绝微软 10 亿美元的收购...
  12. 云脉H5文档管理为你轻松管理文档档案
  13. 信息系统故障分析案例---------记一次性能检测系统故障排查
  14. Ubuntu Kylin 20.10 优麒麟操作系统安装与体验
  15. 核高基项目应该支持谁?
  16. 如何选择适合你的兴趣爱好(三十三),国画
  17. Zcash:工作原理
  18. 网页小游戏源码丨FC模拟器网页版源码
  19. 【Unity3D从入门到进阶】专栏文章导读清单
  20. 单证管理外贸软件解决方案

热门文章

  1. 关于数据可视化Chartjs,Highcharts用法
  2. Python获取Windows软件安装路径
  3. 苹果AirPods Pro可充当助听器使用,说说蓝牙音频技术
  4. CentOS配置静态IP及连接Xshell
  5. 浅谈框架与架构的区别
  6. 纯前端将网页导出pdf文件
  7. busybox启动流程简单解析:从init到shell login
  8. Linux下date命令详解及C/C++代码实现
  9. 应用宝苹果版_点赞应用ios版下载-点赞应用苹果版下载v1.1
  10. 基于Scipy fiting Curve 输出函数