内容:
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. Python全栈Day 15部分知识点
  2. docker进阶篇(一) ---- Volume(数据卷)
  3. 修改最低版本minSdkVersion(转)
  4. JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输
  5. 遇到 ORACLE 错误 1658
  6. python lambda 判断_在Python的Filter中使用lambda函数时,为何达不到预期效果?
  7. python3两个三阶矩阵相乘公式_Numpy 两个矩阵部分维度相乘,有没有很快的方法?...
  8. 随想录(B+树的实现)
  9. 第 7 章 排序算法
  10. 【编程】辨异 —— proxy 与 delegate
  11. LRU原理和Redis实现
  12. php如何使用memcached,PHP如何使用Memcached_PHP
  13. keil uVision 注册过期导致编译不通过
  14. 读书篇:《细说PHP》一、简介
  15. 黑苹果10.13.6及以下安装WebDriver驱动nvidia独立显卡,以及修改机型
  16. C#学习记录——C#项目开发实战:快递单打印精灵(一)
  17. com.android.dx.cf.iface.ParseException
  18. 百度网络质量监控实战:猎鹰一战成名(下)
  19. 【并发编程】Cond 基本用法和如何实现以及常见错误
  20. gif、bmp、jpg、jpeg图片有什么区别

热门文章

  1. 我们一个程序员的爱情书
  2. Spring中的设计模式之Handler模式(一)
  3. SWT学生成绩管理系统(转)
  4. C语言随机生成成绩排序,如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法、冒泡排序法、快速排序法进行排序...
  5. 数据共享与整合技术-总结01
  6. css文字的几种处理
  7. Disruptor 详解
  8. HP SmartStart CD ISO下载地址
  9. Java访问权限修饰符详解
  10. 将txt转换成pdf格式的详细步骤