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 ...
随机推荐
- lbaas
目录 - LBaaS v2 - 负载均衡概念 - 服务器池 Pool - 监听器 Listener - L7 转发策略 l7 policy - 负载均衡算法 Algorithms - 健康监测 Mon ...
- sql server某列数据值逐行累加
sql语句示例: DECLARE @pts varchar(max)='[{"x":5.801718000000000e+002,"y":3.633722000 ...
- 安全测试-WEB安全渗透测试基础知识(五)
1.5. 代码审计 1.5.1. 简介 代码审计是找到应用缺陷的过程.其通常有白盒.黑盒.灰盒等方式.白盒指通过对源代码的分析找到应用缺陷,黑盒通常不涉及到源代码,多使用模糊测试的方式,而灰盒则是黑白 ...
- kubeSphere v3.3.0+kubernetes v1.22.10 集群部署
概述 KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地.很多用户都在使用 KubeSphere 运行工作负载.对于在 Linux 上的安装,KubeSphere ...
- Unity 打包到XCode自动化设置参数
[PostProcessBuild] public static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath) ...
- 分区函数Partition by使用
1.PARTITION BY使用 基本语法 over(partition by col1 order by col2): select t.*,row_number() over( order by ...
- Ubuntu 添加新用户并制定目录和shell
Ubuntu 添加新用户并制定目录和shell 分类: LINUX 2011-07-07 15:22:54 ubuntu新建的用户并没有新建相应的home目录和对应的shell环境. 下面就总结 ...
- 使用Promethues和Grafana监控Flink
之前使用Influxdb储存Metrics经常会出现数据写不进去的问题,当Influxdb重启之后又能写进去,遂将数据存储部分换成Promethues,因为Flink采用PutGateway的方式,需 ...
- javawebServlet
javaweb http响应 服务器 -- 响应 -- 客户端 Accept:告诉浏览器它所支持的数据类型 Accept-Encoding:支持那种 编码格式 GBK UTF-8 GB2312 ISO ...
- 2.5 OpenEuler 中C与汇编的混合编程
2.5 OpenEuler 中C与汇编的混合编程 任务详情 在X86_64架构下实践2.5中的内容,提交代码和实践截图 把2.5的内容在OpenEuler中重新实践一遍,提交相关代码和截图 任务一x8 ...