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

前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了,所以现在打算用C++再实现一遍,由于初次用C++实现,存在错误的地方还望大家指针。下面就直接上代码:

[cpp] view plain copy
  1. <span style="font-size:18px;" deep="5">#include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. //结点类
  5. class Node {
  6. public:
  7. int data;
  8. Node *pNext;
  9. };
  10. //单向链表类
  11. class LinkList {
  12. public:
  13. LinkList() {
  14. //头结点不参与计数
  15. head = new Node;
  16. head->data = 0;
  17. head->pNext = NULL;
  18. }
  19. ~LinkList() { 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 LinkList::CreateLinkList(int n) {
  31. if (n < 0) {
  32. cout << "输入结点个数错误!" << endl;
  33. exit(EXIT_FAILURE);
  34. }
  35. else {
  36. Node *pnew, *ptemp;
  37. ptemp = head;
  38. int i = n;
  39. while (n-- > 0) {
  40. pnew = new Node;
  41. cout << "输入第" << i - n << "个结点值:";
  42. cin >> pnew->data;
  43. pnew->pNext = NULL;
  44. ptemp->pNext = pnew;
  45. ptemp = pnew;
  46. }
  47. }
  48. }
  49. //postion从1开始计数,到链表长度加1结束,头结点后的结点称为第一个结点
  50. void LinkList::InsertNode(int position, int d) {
  51. if (position < 0 || position > GetLength() + 1) {
  52. cout << "输入位置错误!" << endl;
  53. exit(EXIT_FAILURE);
  54. }
  55. else {
  56. Node *pnew, *ptemp;
  57. ptemp = head;
  58. pnew = new Node;
  59. pnew->data = d;
  60. pnew->pNext = NULL;
  61. while (position-- > 1)
  62. ptemp = ptemp->pNext;
  63. pnew->pNext = ptemp->pNext;
  64. ptemp->pNext = pnew;
  65. }
  66. }
  67. void LinkList::TraverseLinkList() {
  68. Node *p = head->pNext;
  69. while (p != NULL) {
  70. cout << p->data << " ";
  71. p = p->pNext;
  72. }
  73. cout << endl;
  74. }
  75. bool LinkList::IsEmpty() {
  76. if (head->pNext == NULL)
  77. return true;
  78. else
  79. return false;
  80. }
  81. int LinkList::GetLength() {
  82. Node *p = head->pNext;
  83. int n = 0;
  84. while (p != NULL) {
  85. n++;
  86. p = p->pNext;
  87. }
  88. return n;
  89. }
  90. //position只能从1开始到链表长度结束
  91. void LinkList::DeleteNode(int position) {
  92. if (position < 0 || position > GetLength()) {
  93. cout << "输入位置错误!" << endl;
  94. exit(EXIT_FAILURE);
  95. }
  96. else {
  97. Node *ptemp = head, *pdelete;
  98. while (position-- > 1)
  99. ptemp = ptemp->pNext;
  100. pdelete = ptemp->pNext;
  101. ptemp->pNext = pdelete->pNext;
  102. delete pdelete;
  103. pdelete = NULL;
  104. }
  105. }
  106. void LinkList::DeleteLinkList() {
  107. Node *pdelete = head->pNext, *ptemp;
  108. while(pdelete != NULL) {
  109. ptemp = pdelete->pNext;
  110. head->pNext = ptemp;
  111. delete pdelete;
  112. pdelete = ptemp;
  113. }
  114. }
  115. //测试函数
  116. int main() {
  117. LinkList l;
  118. int position = 0, value = 0, n = 0;
  119. bool flag = false;
  120. cout << "请输入需要创建单向链表的结点个数:";
  121. cin >> n;
  122. l.CreateLinkList(n);
  123. cout << "打印链表值如下:";
  124. l.TraverseLinkList();
  125. cout << "请输入插入结点的位置和值:";
  126. cin >> position >> value;
  127. l.InsertNode(position, value);
  128. cout << "打印链表值如下:";
  129. l.TraverseLinkList();
  130. cout << "请输入要删除结点的位置:";
  131. cin >> position;
  132. l.DeleteNode(position);
  133. cout << "打印链表值如下:";
  134. l.TraverseLinkList();
  135. l.DeleteLinkList();
  136. flag = l.IsEmpty();
  137. if (flag)
  138. cout << "删除链表成功!" << endl;
  139. else
  140. cout << "删除链表失败!" << endl;
  141. return 0;
  142. }</span>

上面是单向链表的实现,和C的实现其实是差不多的,就是换了一种描述方式。要注意的地方还是和C语言实现是一样的,测试结果如下:

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

  1. python3链表_python3实现单向链表

    创建单向链表有很多种方式,个人觉得从数组创建比较方便,不多说,直接上代码 class linkNode(): """ 链表节点类 """ d ...

  2. 【单向链表】数据结构——单向链表的介绍与代码实现笔记

    从今天开始将修炼数据结构专栏,将持续更新,分模块学习. 数据结构--单向链表 一.数据结构 1.什么是数据结构? 2.逻辑结构和物理结构 二.链表--线性结构 1.首先介绍下链表和数组的区别 2.链表 ...

  3. java 单向链表 双向链表_java 单向链表与双向链表的实现

    链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...

  4. C语言之链表探究之单向链表(List)、附双向循环链表参考博文地址

    参考博文:C语言数据结构-创建链表的四种方法 链表结构图一 链表结构图二 链表结构图三 链表结构图四 一.静态链表 例1: 附例1代码: #include <stdio.h>typedef ...

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

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

  6. 反转单向链表java_Java实现单向链表反转

    本文实例为大家分享了Java实现单向链表反转的具体代码,供大家参考,具体内容如下 1.实现代码 public class LinkedListTest { public static void mai ...

  7. java集合单向链表_Java实现单向链表数据结构

    本文章同步到本人的博客站点 燕归来 链表是一种数据结构,和数组同级.比如,Java中我们使用的ArrayList,其实现原理是数组.而LinkedList的实现原理就是链表了.链表在进行循环遍历时效率 ...

  8. 判断两个无环单向链表/有环单向链表是否相交,并返回相交节点

    题目描述:单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回相交 的第一个节点;如果不相交,返 ...

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

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

最新文章

  1. AMDP + XLSX Workbench 报表开发模式
  2. 哪些手机支持双wifi?
  3. 软件工程师安德烈·梅萨加冕 2021 世界小姐冠军
  4. HTML资源嗅探,scrapy-2 嗅探网站,解析HTML
  5. 分布式常见面试题详解
  6. 极域电子教室加密狗怎么激活
  7. 二叉树前中后序遍历(循环实现)
  8. 2.1.5 物理路径泄漏_最新的泄漏的Windows 8.1 Build显示出继续关注波兰语和改进功能...
  9. 视频监控客户端-GB28181之转码库-转码格式支持H265、H264、MPEG4、MPEG2
  10. Python中常见字符串去除字符串空格的方法
  11. 现今活跃在信息技术领域的卓越作者--张亚飞新作上市
  12. 新技能get,微信提现这样操作可免手续费
  13. 几十个炫酷可视化数据分析网站你值得拥有
  14. 反思:项目开发中的语言沟通与文档沟通
  15. C#读写修改设置调整UVC摄像头画面-伽玛
  16. NGINX-RTMP 直播服务部署
  17. 传智播客.Net视频
  18. 6-Python数字和列表
  19. 求解矩形的面积,求解梯形的面积
  20. vue14 动画-自学视频

热门文章

  1. 2017年07月03号课堂笔记
  2. 2016年,我的和自己谈谈
  3. Python补充06 Python之道
  4. 《计算机组成与体系结构:性能设计》读后小记 6、外部存储器
  5. Tornado/Python 学习笔记(一)
  6. ceph rgw java_ceph rgw multisite基本用法
  7. c free语言自定义函数,C 语言free函数的工作原理
  8. linux 进程与锁,linux 中的进程与锁
  9. C语言作业二选择结构,C语言第二次作业参考答案选择结构.pdf
  10. php数组转为js json,javascript-将数组php转换为JSON时出错