C++实现双向链表的相关操作代码
#include<iostream>
#include<cstdlib>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int Elemtype;
typedef int Status;
typedef struct DuLNode//双向链表的存储结构
{
Elemtype data;//数据域
struct DuLNode* prior;//地址域
struct DuLNode* next;//地址域
}DuLNode, * DuLinklist;
Status InitDuLinklist(DuLinklist& L);//初始双向链表
Status CreateDuLinklist(DuLinklist& L, int n);//创建双向链表
Status GetDuLinklist(DuLinklist L, int i, Elemtype& e);//获取双向链表
Status LocateDuLinklist(DuLinklist L, Elemtype e);//双向链表中查找元素
Status InsertDuLinklist(DuLinklist& L, int i, Elemtype& e);//在双向链表中插入元素
Status DeleteDuLinklist(DuLinklist& L, int i, Elemtype& e);//在双向链表中删除元素
Status PrintDuLinklist(DuLinklist L);//双向链表打印
int main(void)
{
DuLinklist L;
L = NULL;
int k = 0;
int len = 0;
int e = 0;
int i = 0;
do {
cout << "*****双向链表的相关操作*****";
cout << "\n1.初始化双向链表";
cout << "\n2.创建双向链表";
cout << "\n3.获取双向链表";
cout << "\n4.双向链表中查找元素";
cout << "\n5.在双向链表中插入元素";
cout << "\n6.在双向链表中删除元素";
cout << "\n7.双向链表打印";
cout << "\n0.结束程序";
cout << "\n1.初始化双向链表";
cout << "\n输入想要进行的操作数k:";
cin >> k;
switch (k)
{
case 1:
if (InitDuLinklist(L))
cout << "初始化成功。" << endl;
else
cout << "初始化失败。" << endl;
break;
case 2:
cout << "输入想要创建双向链表元素的len的值为:";
cin >> len;
if (CreateDuLinklist(L, len))
cout << "创建成功。" << endl;
else
cout << "创建失败。" << endl;
break;
case 3:
cout << "\n输入想要插入的元素e和想要插入的位置i分别为:";
cin >> e >> i;
if (InsertDuLinklist(L, i, e))
cout << "插入成功。" << endl;
else
cout << "插入失败。" << endl;
break;
case 4:
cout << "\n想要删去元素的位置i:";
cin >> i;
if (DeleteDuLinklist(L, i, e))
cout << "删去成功。" << endl;
else
cout << "删除失败。" << endl;
break;
case 5:
cout << "\n想要查找元素e为:";
cin >> e;
if (LocateDuLinklist(L, e))
cout << "查找成功。" << endl;
else
cout << "查找失败。" << endl;
break;
case 6:
cout << "\n想要获取的元素位置:";
cin >> i;
if (GetDuLinklist(L, i, e))
cout << "获取成功。" << endl;
else
cout << "获取失败。" << endl;
break;
case 7:
if (PrintDuLinklist(L))
cout << "打印成功。" << endl;
else
cout << "打印失败。" << endl;
break;
}
} while (k != 0);
return 0;
}
Status InitDuLinklist(DuLinklist& L)//初始双向链表
{
L = new DuLNode;
L->next = NULL;
L->prior = NULL;
return OK;
}
Status CreateDuLinklist(DuLinklist& L, int n)//创建双向链表
{
DuLNode* p;
int e = 0;
cout << "输入创建双向链表的数值:";
for (int i = 0; i < n; i++)
{
p = new DuLNode;
cin >> e;
p->prior = L;
p->data = e;
p->next = L->next;//将节点*p插入到头节点之后
L->next = p;
}
return OK;
}
Status GetDuLinklist(DuLinklist L, int i, Elemtype& e)//获取双向链表
{
DuLNode* p;
p = L->next;//*p节点是首元结点
int j = 1;
while (p && j != i)
{
p = p->next;
j++;
}
if (!p || j > i) return ERROR;//确定指针p
e = p->data;
cout << "获取的元素是" << e << endl;
return OK;
}
Status LocateDuLinklist(DuLinklist L, Elemtype e)//双向链表中查找元素
{
DuLNode* p;
p = L->next;
int j = 1;
while (p&&p->data!=e)
{
p = p->next;
j++;
}
cout << "元素" << e << "所在的位置是第" << j << "个节点";
return OK;
}
Status InsertDuLinklist(DuLinklist& L, int i, Elemtype& e)//在双向链表中插入元素
{
DuLNode* p, * s;
p = L->next;
int j = 1;
while (p && j != i)
{
p = p->next;
j++;
}
if (!p || j > i) return ERROR;//确定指针p
s = new DuLNode;
s->data = e;
s->prior = p->prior;//将节点*s插入到双向链表
p->prior->next = s;
s->next = p;//将*p节点接到*s节点之后
p->prior = s;
return OK;
}
Status DeleteDuLinklist(DuLinklist& L, int i, Elemtype& e)//在双向链表中删除元素
{
DuLNode* p;
p = L->next;
int j = 1;
while (p && j != i)
{
p = p->next;
j++;
}
if (!p || j > i) return ERROR;//确定指针*p
p->prior->next = p->next;//被删节点*p的前驱结点的后继为*p的后一个
p->next->prior = p->prior;//被删结点*p的后继结点的前驱为*p的前一个
delete p;
return OK;
}
Status PrintDuLinklist(DuLinklist L)//双向链表打印
{
DuLNode* p;
p = L->next;
cout << "双向链表的元素为:";
while (p)
{
cout << p->data << " ";
p = p->next;
}
return OK;
}
C++实现双向链表的相关操作代码的更多相关文章
- java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作
项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...
- 利用JAVA API远程进行HDFS的相关操作
学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...
- HDFS文件目录操作代码
分布式文件系统HDFS中对文件/目录的相关操作代码,整理了一下,大概包括以下部分: 文件夹的新建.删除.重命名 文件夹中子文件和目录的统计 文件的新建及显示文件内容 文件在local和remote间的 ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- 42 github 开源代码 ——README.md语法/相关操作等
0 引言 最近在github上开源了pro/E二次开发的代码,发现README.md的编辑方式很有趣,需要稍微了解一下. 1 markdown语法 参考了两篇博客的内容,链接如下. https://b ...
- 理解CSV文件以及ABAP中的相关操作
在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...
- 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作
上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...
- linux下进程相关操作
一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的 ...
- 前端学习笔记(zepto或jquery)——对li标签的相关操作(五)
对li标签的相关操作——has与find的差异性 demo代码: <ul> <li><p>1</p></li> <li>2< ...
- 前端学习笔记(zepto或jquery)——对li标签的相关操作(四)
对li标签的相关操作——五种方式给奇数项li标签设置样式 demo演示: 1 2 3 4 5 6 7 // 详解: 通常我们为多个li添加样式时常用的是使用filter,但我们在第三节中可以看到fil ...
随机推荐
- 关于JMeter WebSocket插件:JMeter WebSocket插件-关闭SignalR连接--webSocket Close报错
在浦发银行的项目中,主机运维连接成功不做任何操作的场景中,用到了webSocket协议,但是脚本运行中出现webSocke Close报错--解决方案:在webSocket Open Connecti ...
- 2022-05-26内部群每日三题-清辉PMP
1.在执行关键路径上的一项活动时,职能主管将涉及这个活动的两个项目资源调去支持解决某个应急情况,项目经理应该怎么做? A.实施应急计划 B.快速跟进关键路径 C.与职能经理协商分配替代资源 D.将该问 ...
- macos 安装多版本PHP,composer
PHP版本切换网上有写博客用 brew-php-switcher 切换实际没生效,博客也是相互抄,看了袭浪费时间.讲一下我的思路,因为php 可以cli 和fpm 的方式.安装php 将不同版本添加命 ...
- 题解[CF1628F]A_Random_Code_Problem
题意 给定一个数组 \(a\),进行 \(k\) 次操作.第 \(i\) 操作等概率随机 \(a\) 中一个元素 \(a_x\),将这个元素的值加入答案,并使其减去 \(a_x\bmod i\) .问 ...
- Linuxt通过命令lsof或者extundelete工具恢复误删除的文件或者目录
Linux不像windows有那么显眼的回收站,不是简单的还原就可以了.linux删除文件还原可以分为两种情况,一种是删除以后在进程存在删除信息,一种是删除以后进程都找不到,只有借助于工具还原.这里分 ...
- Excel VBA实例
有个朋友让帮忙看下excel数据怎么处理,初步一看有点复杂,难以下手.进一步分析.搜索,发现VBA可以很好地解决这个问题,总结记录一下. 问题描述:如下图,有N个sheet,每个sheet记录了一个公 ...
- C# 将Dll文件打包到exe中
首先在资源管理里面将需要使用的dll添加进入 然后将dll文件的生成操作改成嵌入的资源 然后新建一个类 LoadResourceDll.cs 1 using System; 2 using Syst ...
- 优化多if和else语句
可以利用对象来进行映射 比如 let type = this.radio_value if (type === 'whole') { this.time_value = [] } else if (t ...
- [1] Multi-View Transformer for 3D Visual Grounding 论文精读
参考: https://zhuanlan.zhihu.com/p/467913475 3D Visual Grounding小白调研笔记 https://zhuanlan.zhihu.com/p/34 ...
- KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例
案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...