C++实现单链表相关操作
#include<iostream>
#include<cstdlib>//C++动态分配存储空间
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int Elemtype;
typedef int Status;
typedef struct LNode//定义结点
{
Elemtype date;//数据域
struct LNode* next;//地址域
}LNode,*Linklist;
Status InitLinklist(Linklist& L);//初始化链表
Status CreateLinklist(Linklist& L, int i);//创建单链表
Status GetLinklist(Linklist L, int i, Elemtype& e);//获取单链表
Status LocateLinklist(Linklist L, Elemtype e);//单链表中查找元素
Status InsertLinklist(Linklist& L, int i, Elemtype& e);//在单链表中插入元素
Status DeleteLinklist(Linklist& L, int i, Elemtype& e);//在单链表中删除元素
Status PrintLinklist(Linklist L);//在单链表中打印元素
int main(void)
{
int k = 0;
int len = 0;
int e = 0;
int i = 0;
Linklist L;
L = NULL;
do {
cout << "*****单链表的相关操作*****";
cout << "\n1.单链表的初始化";
cout << "\n2.创建含有len个元素的单链表(前插)";
cout << "\n3.在单链表中第i个位置前插入元素e";
cout << "\n4.在单链表中删除第i个元素";
cout << "\n5.在单链表中查找指定元素e的位置";
cout << "\n6.在单链表中获取第i个位置元素";
cout << "\n7.输出所有元素";
cout << "\n0.结束程序运行";
cout << "\n输入想要执行的操作序号:";
cin >> k;
switch (k)
{
case 1:
if (InitLinklist(L))
cout << "初始化成功。" << endl;
else
cout << "初始化失败。" << endl;
break;
case 2:
cout << "输入想要创建单链表元素的len的值为:";
cin >> len;
if (CreateLinklist(L,len))
cout << "创建成功。" << endl;
else
cout << "创建失败。" << endl;
break;
case 3:
cout << "\n输入想要插入的元素e和想要插入的位置i分别为:";
cin >> e >> i;
if (InsertLinklist(L, i, e))
cout << "插入成功。" << endl;
else
cout << "插入失败。" << endl;
break;
case 4:
cout << "\n想要删去元素的位置i";
cin >> i;
if (DeleteLinklist(L, i, e))
cout << "删去成功。" << endl;
else
cout << "删除失败。" << endl;
break;
case 5:
cout << "\n想要查找元素e为:";
cin >> e;
if (LocateLinklist(L,e))
cout << "查找成功。" << endl;
else
cout << "查找失败。" << endl;
break;
case 6:
cout << "\n想要获取的元素:";
cin >> e;
if (GetLinklist(L, i, e))
cout << "获取成功。" << endl;
else
cout << "获取失败。" << endl;
break;
case 7:
if(PrintLinklist(L))
cout << "打印成功。" << endl;
else
cout << "打印失败。" << endl;
break;
}
} while (k != 0);
return 0;
}
Status InitLinklist(Linklist& L)
{
L = new LNode;
L->next = NULL;
return OK;
}
Status CreateLinklist(Linklist& L, int i)
{
LNode* p;
int m = 0;
cout << "\n输入单链表的数据为:";
for (int t = 0; t < i; t++)
{
p = new LNode;
cin >> m;
p->date = m;
p->next = L->next;//前插
L->next = p;
}
return OK;
}
Status InsertLinklist(Linklist& L, int i, Elemtype& e)
{
LNode* p;
int j = 0;
p = L;
while (p && j < i - 1)
{
p = p->next;
++j;
}
if (!p || j > i - 1) return ERROR;
LNode* s;
s = new LNode;
s->date = e;
s->next = p->next;
p->next = s;
return OK;
}
Status DeleteLinklist(Linklist& L, int i, Elemtype& e)
{
LNode* p;
int j = 0;
p = L;//p指向头结点
while ((p->next) && j < i - 1)
{
p = p->next;
++j;
}
if (!(p->next) || j > i - 1) return ERROR;
LNode* q;
q = p->next;
e = q->date;
p->next = q->next;
delete q;
cout << "删除元素为:" << e << endl;
return OK;
}
Status LocateLinklist(Linklist L, Elemtype e)
{
LNode* p;
int j = 1;
p = L->next;//p指向单链表的首元节点
if (p == NULL) return ERROR;
while (p != NULL && p->date != e)
{
p = p->next;
j++;
}
cout << "元素" << e << "所在的位置是第" << j << "个节点";
return OK;
}
Status GetLinklist(Linklist L, int i,Elemtype& e)
{
LNode* p;
p = L->next;
int j = 1;
while (p && j != i)
{
p = p->next;
j++;
}
if (!p ||j>i ) return ERROR;
e = p->date;
cout << "第" << i << "位置元素为" << e << endl;
return OK;
}
Status PrintLinklist(Linklist L)
{
LNode* p;
p = L->next;
if (L == NULL)
{
cout << "\n表不存在。";
return ERROR;
}
cout << "\n元素为:";
while (p != NULL)
{
cout << p->date << " ";
p = p->next;
}
return OK;
}
C++实现单链表相关操作的更多相关文章
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
- Java实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...
- 数据结构(C语言版)链表相关操作算法的代码实现
这次实现的是带头结点的单链表的初始化.遍历.创建.插入.删除.判断链表是否为空.求链表长度函数,编译环境是vs2013. 其中插入和删除函数中循环的条件目前还不太明白. #include<ios ...
- java单链表常用操作
总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...
- c数据结构 顺序表和链表 相关操作
编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...
- leetcode 单链表相关题目汇总
leetcode-19-Remove Nth From End of List—移除链表中倒数第n个元素 leetcode-21-Merge Two Sorted Lists—两个已排序链表归并 ...
- 使用STL中的list容器实现单链表的操作
#include<iostream> #include<list> #include<algorithm> using namespace std; void Pr ...
- Java数据结构-02单链表(一)
一.链式存储: ①简述:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的.存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个 ...
- Python实现单链表数据的添加、删除、插入操作
Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...
随机推荐
- Mac 压缩软件Keka
mac 的压缩软件Keka,相对比较好用的一款压缩软件 Keka - the macOS file archiver 点击下载 安装就好. 编辑 支持可创建的压缩文件格式,和可解压缩的文件格式列 ...
- MC 末影人
#include <iostream> #include "minecraft.h" using namespace std; int x=225,y=115,z=23 ...
- Qt构造函数和析构函数报错undefinedreferenceto`vtable for 。。。。'
百度了一堆,说各种的都有,无非就是说什么构造函数没有实现父类的纯虚函数,但是我明明继承并实现了,,,最后发现可能就是单纯的Qtcreater抽风了,一开始在构造里面清理了项目,发现不行. 于是一不做二 ...
- golang json 字符串 用 json.Number 解析字段
不定义结构体,用map 解析json 字符串字段 func main() { jsonString := `{"age": 20, "height": 180 ...
- python官方文档:https://pypi.org/
https://pypi.org/ Find, install and publish Python packages with the Python Package Index
- JustAuth-第三方登录组件
1.新增依赖 <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth< ...
- C# Thread.Join()作用
Thread.Join()在MSDN中的解释:Blocks the calling thread until a thread terminates 阻塞calling thread,直到当前join ...
- CentOS 7安装配置vsftp并搭建FTP(一)
vsftp-VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件.关于这个软件的详细信息 大家可以自行百度. 以上自己安装vsftp系统环境 二.查看自己的服务器是否安装了vsftp ...
- 第二性 合卷本 横本.PDF
书本详情 第二性台版 作者: 西蒙.德.波娃(Simone de Beauvoir)出版社: 貓頭鷹原作名: Le Deuxième Sexe译者: 邱瑞鑾出版年: 2013-10页数: 1136装帧 ...
- python 链表推导式x for xx in yy
一.(x for xx in yy )当x为固定参数 如: n = 10 # 生成n个0 matrix = [0 for i in range(n)]# 这里面0代表返回值,后面的for循环就是返回的 ...