C++双向循环列表用法实例
作者:G0561 发布时间:2023-07-23 03:58:54
标签:C++,列表
本文实例讲述了C++双向循环列表用法。分享给大家供大家参考。具体如下:
/*
双向循环链表
*/
#include <iostream>
using namespace std;
//结构体构造链表的指针域和数据域
struct ChainNode
{
int data; //节点数据
ChainNode *left; //节点的前驱指针
ChainNode *right; //节点的后继指针
};
////////////创建n个双向循环链表 并返回链表头指针/////////
ChainNode* CreateNode(int n)
{
ChainNode *head = NULL; //链表头节点
ChainNode *pCur=NULL,*pNew=NULL; //当前节点,新建节点
//初始化头结点的前驱和后继节点都为NULL
if (n<1) //没有节点 返回头节点
{
return head;
}
//创建头节点并将器左右指针指向空
head = new ChainNode;
head->left = NULL;
head->right = NULL;
head->data = 0;
pCur = head;
//为防止指针互指带来的混乱,用pCur节点保存了头节点 也表示当前指针移动到了头指针
//创建n个节点 并连接成链表
for (int i=0; i<n; i++)
{
pNew = new ChainNode; //创建一个新节点
cout<<"请输入数据:";
cin>>pNew->data;
pCur->right = pNew; //头指针的右指针指向新建节点
pNew->left = pCur; //新建节点的左指针执行头节点
pNew->right = NULL; //用于最后和头指针进行交换
pCur = pNew; //指针往下移动
}
//最后将头指针的左指针指向最后一个节点,
//最后一个节点的有指针指向头指针,构成循环
head->left = pCur;
pCur->right = head;
return head;
}
//////////////输出链表头节点///////////////////////
void OutList(ChainNode *head) //参数为头指针 从头指针开始
{
cout<<"链表元素输出如下:"<<endl;
ChainNode *pCur = head->right;
//重第一个节点开始输出
//没有指向空节点,则链表没结束 输出链表元素
while (pCur->right != head)
{
cout<<pCur->data<<" ";
pCur = pCur->right;
//当前节点指向下一个节点 可以遍历链表
}
cout<<pCur->data<<endl;
//输入最后一个元素,它的右指针执行head
}
///////在双向循环链表后添加n个节点//////
ChainNode* AddNode(ChainNode* head, int n)
{
ChainNode *pNew,*pCur;
//新添加节点和当前节点
pCur = head;
//移动到最节点
while (pCur->right != head)
{
pCur = pCur->right;
//当前节点往下移动 一直移到最后一个节点
}
//新添加n个节点并插入链表
for (int i=0; i<n; i++)
{
pNew = new ChainNode;
cout<<"输入要添加的节点元素:";
cin>>pNew->data;
pCur->right = pNew; //头指针的右指针指向新建节点
pNew->left = pCur; //新建节点的左指针执行头节点
pNew->right = NULL; //用于最后和头指针进行交换
pCur = pNew; //指针往下移动
}
//最后将头指针的左指针指向最后一个节点,
//最后一个节点的有指针指向头指针,构成循环
head->left = pCur;
pCur->right = head;
return head;
}
/////在双向循环链表中删除一个节点///////
ChainNode* DeleteNode(ChainNode* head, unsigned num)
//删除第num个节点
{
ChainNode *pNew,*pCur,*temp;
//新添加节点和当前节点 ,临时交换节点
pCur = head;
int ncount = 0;
//移动到第num-1个节点
while (1)
{
ncount++;
pCur = pCur->right; //当前节点往下移动
if (num == ncount)
{
break; //此时pCur还是指向了第num个节点
}
}
//当前节点的前一个节点的右指针 指向 当前节点的下一个节点
//当前节点的下一个节点的左指针 指向 当前节点的上一个节点 构成连接
//最后 删除当前节点
(pCur->left)->right = pCur->right;
(pCur->right)->left = pCur->left;
delete pCur;
return head;
}
int main()
{
int num;
//创建num个节点并显示
cout<<"输入要创建的链表节点个数:";
cin>>num;
ChainNode *head = CreateNode(num);
OutList(head);
//往链表后添加n个节点
int addnum;
cout<<"输入要添加的节点个数:";
cin>>addnum;
AddNode(head, addnum);
OutList(head);
//删除链表的第del个元素
int del;
cout<<"输入要删除的第几个位置的节点:";
cin>>del;
DeleteNode (head, del);
OutList(head);
system("pause");
return 0;
}
希望本文所述对大家的C++程序设计有所帮助。


猜你喜欢
- Spring Boot应用内存飙升一个简单的Spring Boot应用, 几乎只有一个用户在用,内存竟然达到1.2G, 可怕服务现状由于之前
- C#代码与javaScript函数的相互调用 问: 1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量
- Android中获取资源 id 及资源 id 的动态获取我们平时获取资源是通过 findViewById 方法进行的,比如我们常
- 问题描述今天在给SpringBoot项目配置 * 的时候发现怎么都进不到 * 的方法里面,在搜索引擎上看了无数篇关于配置 * 的文章都没有找
- 今天在用OpenCV实验Image Pyramid的时候发现一个奇怪的问题,就是利用C++函数imread读取图片的时候返回的结果总是空,而
- 【一】背景6.0运行时申请权限已经是一个老生常谈的内容了,最近项目TargetSDKVersion升到23以上,所以我们也需要做权限管理,我
- StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),
- 接着上一篇进行学习java文件上传下载1。五、断点续传 对于熟用QQ的程序员,QQ的断点续传功能应该是印象很深刻的。因为它很实用也
- Java 中HttpURLConnection附件上传的实例详解整合了一个自己写的采用Http做附件上传的工具,分享一下!示例代码:/**
- 为了实现不同环境构建的不同需求,这里使用到了 profile。因为 profile 能够在构建时修改 pom 的一个子集,或者添加额外的配置
- 前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分。它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home
- eclipse 创建 user library 方法1、Window - Preferences - Java - Build Path -
- 在JAVA克隆对象不能简单的使用clone方法,clone方法只是进行浅克隆。请看下方:深度克隆类:Java代码 import java.i
- 什么是异常?最简单的,看一个代码示例:public static void main(String[] args) { &nb
- JNI简介JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C
- 网上汗牛充栋的文章都是介绍Android远程服务的,一个个将Binder机制、AIDL讲得头头是道,然而没有几个人能够给出清晰的范例说明如何
- 说明Flutter原生是没有支持数据库操作的,它使用SQLlit插件来使应用具有使用数据库的能力。其实就是Flutter通过插件来与原生系统
- 本文章是基于鸿洋的Android 自定义View (一) 的一些扩展,以及对Android自定义View构造函数详解里面内容的一些转载。首先
- 本文实例为大家分享了Android实现五子棋游戏的具体代码,供大家参考,具体内容如下实现环境: android studio 3
- 前言在我们java开发中,Date日期这个字段会被经常使用,比如获取当前系统的时间,获取上个月,上一年的时间,以及获取两个日期相差的时分秒数