#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++实现单链表相关操作的更多相关文章

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

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

  2. 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

    数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...

  3. Java实现单链表反转操作

    单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...

  4. 数据结构(C语言版)链表相关操作算法的代码实现

    这次实现的是带头结点的单链表的初始化.遍历.创建.插入.删除.判断链表是否为空.求链表长度函数,编译环境是vs2013. 其中插入和删除函数中循环的条件目前还不太明白. #include<ios ...

  5. java单链表常用操作

    总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...

  6. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  7. leetcode 单链表相关题目汇总

      leetcode-19-Remove Nth From End of List—移除链表中倒数第n个元素 leetcode-21-Merge Two Sorted Lists—两个已排序链表归并 ...

  8. 使用STL中的list容器实现单链表的操作

    #include<iostream> #include<list> #include<algorithm> using namespace std; void Pr ...

  9. Java数据结构-02单链表(一)

    一.链式存储: ①简述:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的.存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个 ...

  10. Python实现单链表数据的添加、删除、插入操作

    Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...

随机推荐

  1. git---全局设置用户名、密码、邮箱

    # git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址. # 1.查看git配置信息 $ ...

  2. API的风格

    好奇怪呀,感觉所有风格不都差不多嘛 1.REST REST(REpresentational State Transfer),首次出现在 2000 年 Roy Thomas Fielding 的博士论 ...

  3. 青少年CTF-Hanser!![wp]

    一 题目描述 二 解题步骤 1. hanser.txt A‌‌​‎‏​‌​‎‏​‏‏‌​‎​‍‌​‍‍​‎‏​‏‏‌​‌‎​‌‏​‏‏‌​‍‏​‎​‏‎​‌‎​‎‍​‍‎​‏‎‎‏nemḍiq-nni ...

  4. 对Frobenius 范数的理解

    Frobenius 范数是一种矩阵范数,记为 ∣ ∣ ⋅ ∣ ∣ F ||·||_F ∣∣⋅∣∣F​,定义为一个矩阵所有元素平方和的开方,即 ∣ ∣ X ∣ ∣ F = ∑ i ∑ j x i , j ...

  5. 二叉树TwT

    L2-011 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. ...

  6. MobaXterm汉化版教程

    MobaXterm中文版是一款非常好用的远程连接.远程控制软件,它堪称全能终端神器,支持非常多的远程协议 ,如SSH,Telnet,Rsh,Xdmc,RDP,VNC,FTP,SFTP,串口(Seria ...

  7. React.CreateContext

    跨组件传递的内容组件,该组件导出两个对象Provider 提供数据, Consumer, 消费数据 Context被翻译为上下文,在React的官方文档中归类于高级部分,属于React的高级API,但 ...

  8. gitlab 已有代码仓库推送到另外一个gitlab仓库

    创建一个新仓库 git clone ssh://git@gitlab.***************.git cd plt-calcium-report-web touch README.md git ...

  9. wireguard 在openwrt中的配置

    按照网上教程正常配置,防火墙通信规则中,选择打开监听端口,目标设备:设备(输入),目标端口:监听端口. 客户端设置:注意路由器的IP地址(段)要填0.0.0.0/0.

  10. java8线程池创建并使用

    1.创建@Configurationpublic class ThreadPoolConfig { /** * 创建线程池 */ @Bean(name = "threadPool" ...