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 ...
随机推荐
- 使用vue+iview创建自己的对话框组件
通过对别的案例反复研究,终于总结出自己对于使用vue+iview创建组件的步骤: 第一步:编辑新建对话框组件(子组件) <template> <div> <!-- mod ...
- Vue 项目中实现的微信、微博、QQ空间分享功能(亲测有效)
需求:文章添加分享功能(包括微信.微博.QQ空间) 如下图所示: 点击图标分别跳转到如下界面:(实现效果如下) 话不多说直接代码(可以封装成组件) <template> <div c ...
- Linux用rsync命令秒删十万文件
迁移网站和rm删除大量文件卡住怎么办? 昨天在服务器网站搬家的时候遇到一个小问题,在linux端现在用宝塔面板管理非常方便,于是搬家也偷懒用一键迁移的功能,可以把数据库网站配置等一次性迁移到新服务器, ...
- jreg视频内容整理
目录 5种变得开心的方法 我(曾经)想死 别再问我过得好不好了 5种变得开心的方法 浪费时间,比如打游戏,什么都不干 停止思考,什么都不要想,刷视频 独处,不要跟别人分享你的痛苦,把自己的痛苦当作世界 ...
- nginx 同一个域名根据后缀不同访问不同的项目
server { listen 80; server_name bcgx.work; location / { index login.html login.htm index.php; root / ...
- python_基础_习题集(10.25更新)
一.文件 1.利用文件充当数据库编写用户登录.注册功能 文件名称:userinfo.txt 基础要求: 用户注册功能>>>:文件内添加用户数据(用户名.密码等) 用户登录功能> ...
- pillow 创建图片并添加一些自定义信息
from PIL import Image vm = Image.new('RGBA', (dshape[1], dshape[0])) vm = Image.fromarray(np.array(s ...
- MySQL 学习(四)并集查询
联合查询,它是用 union 关键字把多条 select 语句的查询结果合并为一个结果集.纵向合并的前提是被合并的结果集的字段数量.顺序和数据类型必须完全一致.字段名不一样的情况下,会将第一个结果集的 ...
- chia P图安装
https://techtellectual.com/chia-plotting-guide-installing-plotman-and-mad-max-in-linux/ Chia 绘图指南:在 ...
- linux查找服务位置