head文件

#include<iostream>
#define status int
#define OK 1
#define ERROR 0
using namespace std;
typedef int elemType;
#include"head.h"
//单链表结点数据结构
typedef struct LNode{elemType data;//数据域struct LNode *next;//指针域
}LNode,*LinkList;//linklist是指向LNode结构的指针类型//solution类
class solution{
public:status InitList(LinkList &L);int ListLength(LinkList L);bool ListInsert(LinkList &L,int i,elemType e);bool ListDelete(LinkList &L,int i);LNode *LocateElem(LinkList L,elemType e);void PrintList(LinkList L);void Insert(LinkList &L);void Delete(LinkList L);void Search(LinkList L);void menu();solution();//空参构造函数~solution();//析构函数};
status solution::InitList(LinkList &L){L = new LNode;//生成头结点 这样删除等操作就不必分第一个结点和其他了L->next = NULL;return 1;
}
//获取单链表长度 头结点无数据,不算
int solution::ListLength(LinkList L){LinkList p=L;int sum=0;while(p){sum++;p=p->next;}return sum-1;//去除头结点
}
//插入函数--后插法 插入到第i(1<=i<=length+1)个位置 即i-1之后 不必区分i的位置
bool solution::ListInsert(LinkList &L,int i,elemType e){LNode* s;LinkList p=L;int j=0;while(p && (j<i-1)){//j指到i-1位置或者p已经到最后时跳出p=p->next;++j;}if(!p||j>i-1){//i<1或者i>ListLength(L)+1时,插入位置无效 不调用ListLength,提高效率cout<<"插入位置无效!!!"<<endl;return false;}s=new LNode;s->data=e;s->next=p->next;p->next=s;return true;
}
//删除函数 删除位置i的结点 即删除i-1之后的结点
bool solution::ListDelete(LinkList &L,int i){LNode* s;LinkList p=L;int j=0;LinkList q;while(p && (j<i-1)){//j指到i-1位置p=p->next;++j;}if(!(p->next)||j>i-1){//i<1或者i>ListLength(L)时,删除位置无效cout<<"删除位置无效!!!"<<endl;return false;}q=p->next;p->next=q->next;free(q);//释放空间return true;
}
//查找函数 按值查找 查找第一个等于e的结点 成功返回该结点指针,否则返回NULL
LNode* solution::LocateElem(LinkList L,elemType e){LNode* p;p=L->next;while(p && (p->data!=e))p=p->next;return p;
}//遍历输出函数
void solution::PrintList(LinkList L){LinkList p=L->next;//跳过头结点if(ListLength(L)){cout<<"当前单链表所有元素:";while(p){cout<<p->data<<"\t";p=p->next;}cout<<endl;}elsecout<<"当前单链表已空!"<<endl;
}
//插入功能函数 调用ListInsert后插
void solution::Insert(LinkList &L){int place;elemType e;bool flag;cout<<"请输入要插入的位置(从1开始)及元素:"<<endl;cin>>place>>e;flag=ListInsert(L,place,e);if(flag) {cout<<"插入成功!!!"<<endl;PrintList(L);}
}
//删除功能函数 调用ListDelete删除
void solution::Delete(LinkList L){int place;bool flag;cout<<"请输入要删除的位置(从1开始):"<<endl;cin>>place;flag=ListDelete(L,place);if(flag) {cout<<"删除成功!!!"<<endl;PrintList(L);}
}
//查找功能函数 调用LocateElem查找
void solution::Search(LinkList L){elemType e;LNode *q;cout<<"请输入要查找的值:"<<endl;cin>>e;q=LocateElem(L,e);if(q)cout<<"找到该元素!位置为:"<<L->next<<endl;elsecout<<"未找到该元素!"<<endl;
}
solution::solution(){cout<<"\t\t\t\t\t\tThe author is DongShin."<<endl<<endl<<"\t\t\t\t\t\tAnd time is 2021.05.20."<<endl<<endl;
}
solution::~solution(){cout<<"\t\t\t\t\tBring out by C++."<<endl;
}
//菜单
void solution::menu(){cout<<"\t\t\t\t\t********1.后插\t2.删除*********"<<endl<<"\t\t\t\t\t********3.查找\t4.输出*********"<<endl<<"\t\t\t\t\t********5.退出\t      *********"<<endl;
}
//主函数
int main(){solution debug;//类成员参数debug.LinkList L;int choice;debug.InitList(L);//调用类成员while(1){cout<<"\t";debug.~solution();cout<<endl;debug.menu();cout<<"\t\t请输入菜单序号:"<<endl;cin>>choice;if(choice==5) break;switch(choice){case 1:debug.Insert(L);break;case 2:debug.Delete(L);break;case 3:debug.Search(L);break;case 4:debug.PrintList(L);break;default:cout<<"\t\t非法输入!"<<endl;}}//while()循环system("pause>nul");//调用系统函数,等价于cin.get();return 0;
}

数据结构单向链表(C++)相关推荐

  1. 数据结构-单向链表解决学生录入问题

    数据结构-单向链表 单向链表实现学生录入程序 通过main函数实现一切功能 通过调用函数实现 传送门结束 单向链表实现学生录入程序 将用户输入的不定个数的学生成绩按顺序编号并保存,以用户输入0作为录入 ...

  2. 数据结构单向链表线性结构_线性数据结构链表为何以及如何解释

    数据结构单向链表线性结构 Imagine you have gone to a crowded place, say to a k-pop concert with your friends and ...

  3. 【单向链表】数据结构——单向链表的介绍与代码实现笔记

    从今天开始将修炼数据结构专栏,将持续更新,分模块学习. 数据结构--单向链表 一.数据结构 1.什么是数据结构? 2.逻辑结构和物理结构 二.链表--线性结构 1.首先介绍下链表和数组的区别 2.链表 ...

  4. 简单数据结构——单向链表

    恩,准备重最简单的东西复习和学习一遍.那就从数据结构开始吧. 我尽量用公司的代码标准来进行编码.希望对刚刚开始学习数据结构的有一些帮助吧. 使我的代码可以简单易懂. 我记得上数据结构的第一个程序就是链 ...

  5. 数据结构—单向链表(详解)

    一.链表基础 链表是一种常见的数据结构,其中运用到了结构体指针,链表可以实现动态存储分配,换而言之,链表是一个功能强大的数组,可以在某个节点定义多种数据类型,可以实现任意的添加,删除,插入节点等.链表 ...

  6. 数据结构 | 单向链表学习总结

    单向链表学习总结 简介 总结 链表介绍 链表定义 链表函数 计算链表的长度 将列表转换为链表 LeetCode:剑指 Offer 22. 链表中倒数第k个节点 双向链表学习总结:python | 双向 ...

  7. 数据结构--单向链表

    单向链表的一种Go语言实现 package mainimport "fmt"type Node struct {no intname stringnext *Node }//实现尾 ...

  8. 数据结构——单向链表

    链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成. 结点API设计 类名 N ...

  9. 数据结构——单向链表-双向链表

    1.单向链表按位置修改 //按位置修改 int updata_pos(linklist *L,int pos,datatype new_e) {if(NULL==L||empty(L)||pos< ...

最新文章

  1. winform 打印控件
  2. springmvc的原理架构,Struts2运行原理,springmvc和Struts2的区别
  3. PickerView的使用
  4. idea登录页面ajax验证,IDEA如何实现登录注册页面 IDEA实现登录注册页面代码示例...
  5. 英语系大一计算机课程有哪些,英语专业大一学习计划.docx
  6. cygwin下使用apt-cyg安装新软件
  7. 手机无限重启可能跟电压不稳有关
  8. 3Dtouch 基本原理
  9. python获取游戏窗口_python中pygame针对游戏窗口的显示方法实例分析(附源码)
  10. 连接肠菌与宿主的桥梁:肠菌代谢物——肠菌功能研究新篇章
  11. C/C++ 木材加工
  12. android gradle 多渠道打包小结
  13. 【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)
  14. 扶不扶真人版现烟台 警察被老人问“你咋撞我”
  15. 渗透利器 | 提权辅助工具箱
  16. [算法导论] 最大差值、最小差值
  17. 爱奇艺RN低代码引擎:千变万化、快速搭建的万花筒
  18. Small Tip: 怎么去Schedule一个Analysis for Office的workbook
  19. 第10届(深圳)城市艺博会即将于12月13日开幕!
  20. 国内关于自然语言处理的研究方向细分

热门文章

  1. sspanel php,sspanelv3魔改版邮件设置指南及常用配置
  2. 云文件共享服务器,云文件共享服务器软件
  3. 【总结】PHP常见面试题汇总(一)。。。
  4. 2021React面试精选——持续更新
  5. 数据库设计需要注意什么?
  6. 分享一个微信小程序编辑页面的WXML模板
  7. [论文阅读]Designing an Encoder for StyleGAN Image Manipulation
  8. Latex中BibTex编辑参考文献
  9. 李煌老师发表的算法方面的论文
  10. 【愚公系列】2023年01月 .NET CORE工具案例-基于SqlSugar的多库多表融合查询