• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++双向循环列表用法实例

C++双向循环列表用法实例

作者:G0561 字体:[增加 减小] 来源:互联网 时间:2017-05-28

G0561 通过本文主要向大家介绍了c++游戏开发实例,c++实例开发,linux c++项目实例,c++程序实例,c++项目开发实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了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;
}

</div>

希望本文所述对大家的C++程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 将文件数据一次性加载进内存实例代码
  • C++ 面试题翻译电话号码实例代码
  • C++中实现把表的数据导出到EXCEL并打印实例代码
  • C++实例输入多行数字到数组
  • 实例讲解C++编程中对设计模式中的原型模式的使用
  • C++基础知识实例解析(一)
  • C++双向循环列表用法实例
  • C++读写INI配置文件的类实例
  • C++广播通信实例
  • C++进程间共享数据实例

相关文章

  • 2017-05-28c++友元函数与友元类的深入解析
  • 2017-05-28Define,const,static用法总结
  • 2017-05-28vector与map的erase()函数详细解析
  • 2017-05-28关于STL中的map容器的一些总结
  • 2017-05-28C/C++实现对STORM运行信息查看及控制的方法
  • 2017-05-28算法详解之分支限界法的具体实现
  • 2017-05-28C/C++静态类和this指针详解及实例代码
  • 2017-05-28C语言中 int main(int argc,char *argv[])的两个参数详解
  • 2017-05-28详解C语言中telldir()函数和seekdir()函数的用法
  • 2017-05-28VC6.0代码自动提示 VC6.0在win7环境下代码提示智能化

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VC定时器的用法实例详解
    • 探讨:用两个栈实现一个队列(我作为面试官的小结)
    • 求一个n阶方阵对角线元素之和。
    • VC实现图片拖拽及动画的实例
    • C++ 简单的任务队列详解
    • C++计数排序详解
    • C++设计模式编程中Template Method模板方法模式的运用
    • C语言连续子向量的最大和及时间度量实例
    • 基于Linux系统调用--getrlimit()与setrlimit()函数的方法
    • 下标操作符重载模拟多维数组详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有