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 ...
随机推荐
- vite 运行或打包出现内存溢出的解决方案
在使用vite运行或打包时出现了内存耗尽的报错 vite VUE npm run build 报错 npm ERR! code ELIFECYCLE npm ERR! errno 134 内存溢出 n ...
- LESS-8
根据题目,这是一道布尔型注入.页面只有返回正常和不正常两种. payload: ' and substr(database(),1,1)='s' --+ 判断当前数据库名的第一个字母,是's'页面就 ...
- Django 初步运行过程分析笔记
2. django运行过程分析第一个过程分析:django启动过程python mangage.py runserver 0.0.0.0:8000这个命令先被python的sys.argv接收起来,保 ...
- js判断数组的方法
1.实例的__proto__ 属性 非标准ie浏览器不支持 let arr = [1,2,3]; console.log('__proto__',arr.__proto__ === Array.pro ...
- supervisor(进程管理)
1.安装程序 yum -y install supervisor 2.路径文件 /etc/supervisord.d /etc/supervisord.conf 3.生成配置. echo_superv ...
- docker 搭建minio
minio为开源的高可用分部署对象存储服务组件,已经提供了分布式部署的解决方案,实现高可靠.高可用的资源存储,MinIO以极简主义为指导进行设计,追求极致的维护精简性和卓越的读写性能表现. -dock ...
- linux 中后台运行python脚本
nohup python yourscript.py &可以让你的程序在后台运行,控制台输出导向nohup.out文件 使用nobup命令 结尾处加一个& 符号
- 【python/pyside2】向QVBoxLayout添加滚动条
import sys from PySide2.QtWidgets import * from PySide2.QtGui import QFont from PySide2 import QtCor ...
- JS时间处理,兼容IOS
timeFormatting(val) { let time = val.slice(0, 10) // 兼容IOS time = time.replace(/-/g, '/') let date = ...
- 字符串类型如何格式化保留小数点后两位【ToString("0.00")】
废话都不想写了,直接上图 遇到将decimal字段或者double字段转换成字符串string类型字段时想直接保留小数点后面两位的时候可以有个比较简易的格式化写法 也就是 str.ToString(& ...