http://blog.csdn.net/fisherwan/article/details/25649073

链表(三)实现双向链表操作,代码如下:

[cpp] view plain copy
  1. <span style="font-size:18px;" deep="5">#include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. //结点类
  5. class Node {
  6. public:
  7. int data;
  8. Node *pPre, *pNext;
  9. };
  10. //双向链表类
  11. class DoubleLinkList {
  12. public:
  13. DoubleLinkList() {
  14. head = new Node;
  15. head->data = 0;
  16. head->pNext = NULL;
  17. head->pPre = NULL;
  18. }
  19. ~DoubleLinkList() {delete head;}
  20. void CreateLinkList(int n);             //创建链表
  21. void InsertNode(int position, int d);   //在指定位置处插入结点
  22. void TraverseLinkList();                //遍历链表
  23. bool IsEmpty();                         //判断链表是否为空
  24. int GetLength();                        //获得链表长度
  25. void DeleteNode(int position);          //删除指定位置处结点
  26. void DeleteLinkList();                  //删除链表
  27. private:
  28. Node *head;
  29. };
  30. void DoubleLinkList::CreateLinkList(int n) {
  31. if (n < 0) {
  32. cout << "输入结点个数错误!" << endl;
  33. exit(EXIT_FAILURE);
  34. }
  35. else {
  36. int i = 0;
  37. Node *pnew, *ptemp;
  38. ptemp = head;
  39. i = n;
  40. while (n-- > 0) {
  41. cout << "请输入第" << i - n << "个结点值:";
  42. pnew = new Node;
  43. cin >> pnew->data;
  44. pnew->pNext = NULL;
  45. pnew->pPre = ptemp;
  46. ptemp->pNext = pnew;
  47. ptemp = pnew;
  48. }
  49. }
  50. }
  51. void DoubleLinkList::InsertNode(int position, int d) {
  52. if (position < 0 || position > GetLength() + 1){
  53. cout << "输入位置错误!" << endl;
  54. exit(EXIT_FAILURE);
  55. }
  56. else {
  57. Node *pnew, *ptemp;
  58. pnew = new Node;
  59. pnew->data = d;
  60. ptemp = head;
  61. while (position-- > 1)
  62. ptemp = ptemp->pNext;
  63. if (ptemp->pNext != NULL)
  64. ptemp->pNext->pPre = pnew;
  65. pnew->pNext = ptemp->pNext;
  66. pnew->pPre = ptemp;
  67. ptemp->pNext = pnew;
  68. ptemp = pnew;
  69. }
  70. }
  71. void DoubleLinkList::TraverseLinkList() {
  72. Node *ptemp = head->pNext;
  73. while (ptemp != NULL) {
  74. cout << ptemp->data << " ";
  75. ptemp = ptemp->pNext;
  76. }
  77. cout << endl;
  78. }
  79. bool DoubleLinkList::IsEmpty() {
  80. if (head->pNext == NULL)
  81. return true;
  82. else
  83. return false;
  84. }
  85. int DoubleLinkList::GetLength() {
  86. int n = 0;
  87. Node *ptemp = head->pNext;
  88. while (ptemp != NULL) {
  89. n++;
  90. ptemp = ptemp->pNext;
  91. }
  92. return n;
  93. }
  94. void DoubleLinkList::DeleteNode(int position) {
  95. if (position < 0 || position > GetLength()) {
  96. cout << "输入数据错误!" << endl;
  97. exit(EXIT_FAILURE);
  98. }
  99. else {
  100. Node *pdelete, *ptemp;
  101. ptemp = head;
  102. while (position-- > 1)
  103. ptemp = ptemp->pNext;
  104. pdelete = ptemp->pNext;
  105. if (pdelete->pNext != NULL)
  106. pdelete->pNext->pPre = ptemp;
  107. ptemp->pNext = pdelete->pNext;
  108. delete pdelete;
  109. pdelete = NULL;
  110. }
  111. }
  112. void DoubleLinkList::DeleteLinkList() {
  113. Node *pdelete, *ptemp;
  114. pdelete = head->pNext;
  115. while (pdelete != NULL) {
  116. ptemp = pdelete->pNext;
  117. head->pNext = ptemp;
  118. if (ptemp != NULL)
  119. ptemp->pPre = head;
  120. delete pdelete;
  121. pdelete = ptemp;
  122. }
  123. }
  124. //测试函数
  125. int main() {
  126. DoubleLinkList dl;
  127. int position = 0, value = 0, n = 0;
  128. bool flag = false;
  129. cout << "请输入需要创建双向链表的结点个数:";
  130. cin >> n;
  131. dl.CreateLinkList(n);
  132. cout << "打印链表值如下:";
  133. dl.TraverseLinkList();
  134. cout << "请输入插入结点的位置和值:";
  135. cin >> position >> value;
  136. dl.InsertNode(position, value);
  137. cout << "打印链表值如下:";
  138. dl.TraverseLinkList();
  139. cout << "请输入要删除结点的位置:";
  140. cin >> position;
  141. dl.DeleteNode(position);
  142. cout << "打印链表值如下:";
  143. dl.TraverseLinkList();
  144. dl.DeleteLinkList();
  145. flag = dl.IsEmpty();
  146. if (flag)
  147. cout << "删除链表成功!" << endl;
  148. else
  149. cout << "删除链表失败!" << endl;
  150. return 0;
  151. }</span>

(C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作相关推荐

  1. php上传图片到数据库2020,弱鸡养成第三天(2020.10.19)-php连接并简单操作数据库

    弱鸡养成第三天(2020.10.19)-php连接并简单操作数据库 弱鸡养成第三天(2020.10.19)-php连接并简单操作数据库 php连接数据库 连库基本操作 首先找到php.ini 文件中的 ...

  2. (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作

    http://blog.csdn.net/fisherwan/article/details/25649271 链表(四)实现双向循环链表简单操作,代码如下: [cpp] view plain cop ...

  3. 链表(创建,插入,删除和打印输出

    http://www.bianceng.cn/Programming/C/200705/327.htm  (以下不全,去此网址看) 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了 ...

  4. 合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表

    SQL语句创建和删除基本表 1. 编写6个基本表 2. 修改基本表结构,完整性约束条件 3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系 ...

  5. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...

    #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...

  6. 二叉搜索树(创建,插入,删除):基础篇,适合新手观看。

    1.1 二叉搜索树的插入 二叉搜索树的概念相信大家都很清楚,无非就是左小右大 创建二叉搜索树,其实就是多次调用二叉搜索树的插入方法,所以首先我们来讲讲如何插入节点到二叉搜索树里,假设一颗二叉搜索树如下 ...

  7. MySQL 索引的创建、删除和查看操作

    ybm(使用部门)一般只有几条记录,除了主关键字外对任何一个字段建索引都不会产生性能优化,实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引,而是自动执行全表访问 1.索引作用 在索引列 ...

  8. C/C++创建和删除文件夹操作(包含多级)

    下面给出创建单个文件夹的方法,每一种方法后面都紧跟着对应的删除文件夹的方法. 此处参考博主. 一:调用Windows API函数 CreateDirectory()和 RemoveDirectory( ...

  9. oracle创建、删除索引等操作

    1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...

最新文章

  1. php学习,一个简单的Calendar(2) 一个简单的活动页面
  2. 【密码学】一万字带您走进密码学的世界(下)
  3. python中的进程
  4. objective-C CollectionView 加深(添加注册头部View)
  5. 硬核!国外开发者用 25 美元做了个区块链警佩相机!
  6. 自动化测试的点点滴滴经验积累
  7. 12月13日 新概念3一周一篇计划
  8. JavaScript学习指南
  9. 微商的十种实用推广方法
  10. uabntu镜像文件的后缀
  11. 人工智能机器人技术概述
  12. 支付宝扫码跳转到跳转页面
  13. Win10家庭版中文用户名改英文用户名方法(亲测管用)
  14. 如何提高代码质量,或者说高质量代码的特征是什么
  15. java毕业设计m和vue的酒店管理系统2021(附源码、数据库)
  16. java 面试概念题 笔记
  17. android系统 通知,Android中通知的使用-----Notification详解
  18. CSP-J 2020 第二轮 优秀的拆分(power)题解 —— 特别篇
  19. Python基础教程(一)
  20. 抖音2023剪映/达芬奇/AE/VEGAS等可用的LUTs预设

热门文章

  1. 深入理解softmax函数
  2. SpringMVC整合MongoDB
  3. Axis通过wsdd部署Web Service
  4. PHP 性能分析: Xhprof Xhgui
  5. Android programming on Mac 之安装Eclipse
  6. Android开发和调试必备工具-SDK Tools
  7. Qt中QTableWidget用法总结
  8. VC.NET 字节对齐设置
  9. android 浏览器 div穿透,解决IE 上重叠div 对 mouseover 事件的穿透方法之一
  10. mysql workbench启动_怎么启动mysql workbench