1. #if 1
  2.  
  3. #include <iostream>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #include <fstream>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. //类
  12. class List
  13. {
  14. public:
  15. //构造器初始化,生成头节点
  16. List()
  17. {
  18. head = new Node;
  19. head->next=NULL;
  20. }
  21.  
  22. //成员函数
  23. void createList();
  24. void insertList(int data);
  25. void travelList();
  26. void input();
  27. int addNode();
  28. void deleteData(int addNum);
  29. void ifClear();
  30. void clearList();
  31. private:
  32. //数据成员
  33. struct Node
  34. {
  35. int data; //数据域
  36. struct Node * next; //指针域
  37.  
  38. } * head;//头指针
  39.  
  40. int num;//链表元素个数
  41. };
  42.  
  43. //头插法生成节点
  44. void List::insertList(int data)
  45. {
  46. Node * cur=new Node;
  47.  
  48. //插入数据
  49. cur->data=data;
  50.  
  51. //插入节点
  52. cur->next =head->next;
  53. head->next=cur;
  54. }
  55.  
  56. //调用insertList输入数据,生成链表
  57. void List::input()
  58. {
  59. cout<<"请输入链表数量长度:";
  60. cin >>num;
  61. srand(time(NULL));
  62. for(int i=0;i<num;i++)
  63. {
  64. insertList(rand()%100);
  65. }
  66. }
  67.  
  68. //任意位置插入节点
  69. int List::addNode()
  70. {
  71. int d,idx;
  72.  
  73. cout<<"请输入你要插入的节点数据:";
  74. cin >>d;
  75. cout<<"请输入你要插入的节点位置: ";
  76. cin >>idx;
  77.  
  78. Node *tp=NULL;
  79. Node *link=head;
  80.  
  81. //寻找插入位置
  82. if(idx<1||idx>num+1)
  83. cout<<"操作非法"<<endl;
  84. else
  85. {
  86. for(int i=0;i<idx;i++)
  87. {
  88. tp=link;
  89. link=link->next;
  90. }
  91.  
  92. Node *cur=new Node;
  93. tp->next=cur;
  94. cur->data=d;
  95. cur->next=link;
  96. travelList();
  97. return ++num;
  98. }
  99. }
  100.  
  101. //遍历链表并将数据存入文件
  102. void List::travelList()
  103. {
  104. ofstream mycout("D:/text.txt");
  105. Node *temp = head->next; //防止头指针地址改变
  106. while(temp != NULL)
  107. {
  108. cout<<temp->data<<" ";
  109. mycout<<temp->data<<" ";
  110. temp=temp->next;
  111. }
  112. mycout.close();
  113. cout<<endl;
  114. }
  115.  
  116. //删除节点
  117. void List::deleteData(int addNum)
  118. {
  119. int i,j=0;
  120. cout<<"请问您要删除第几个数据: ";
  121. cin >>i;
  122. Node *tp=NULL;
  123. Node *link=head;//link为删除节点后面的一个节点,temp为删除节点
  124.  
  125. if(addNum<i||i<0)
  126. cout<<"操作非法!!"<<endl;
  127. else
  128. {
  129. while(link->next)
  130. {
  131. tp=link->next; //第一个节点
  132. j++;
  133. if(i==j) //找的删除的节点
  134. {
  135. link->next=tp->next;
  136. delete tp;
  137. break;
  138. }
  139. link=link->next;
  140. }
  141. travelList();
  142. }
  143.  
  144. }
  145.  
  146. //清空链表
  147. void List::clearList()
  148. {
  149. Node *tp = NULL;
  150. Node *ph=head->next;
  151.  
  152. while(head->next)
  153. {
  154. tp=ph;
  155. ph=ph->next;
  156. delete tp;
  157. head->next=ph;
  158. }
  159.  
  160. travelList();
  161. cout<<endl;
  162. }
  163.  
  164. //询问是否清空
  165. void List::ifClear()
  166. {
  167. string i;
  168.  
  169. if(!head->next)
  170. {
  171. cout<<"链表已清空!!!"<<endl;
  172. }
  173.  
  174. else
  175. {
  176. cout<<"是否清空链表(是/否):";
  177. cin>>i;
  178.  
  179. if(i=="是")
  180. {
  181. clearList();
  182. cout<<"链表清空完成!!!"<<endl;
  183. }
  184. else
  185. cout<<"链表未清空!!!"<<endl;
  186. }
  187. }
  188.  
  189. void main()
  190. {
  191. //初始化,生成头节点
  192. List list;
  193.  
  194. //输入链表长度
  195. list.input();
  196.  
  197. //遍历链表,并存入文件
  198. list.travelList();
  199.  
  200. //添加节点并返回总结点数
  201. int addNum=list.addNode();
  202.  
  203. //删除节点
  204. list.deleteData(addNum);
  205.  
  206. //是否清空链表
  207. list.ifClear();
  208.  
  209. system("pause");
  210.  
  211. }
  212. #endif

  

总结:汉字输入需要用string,在头文件string中;字符串比较可以直接用比较运算符;

c++利用类进行单链表的插入,删除,清空操作的更多相关文章

  1. 单链表的插入删除操作(c++实现)

    下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream ...

  2. 面试之路(10)-BAT面试之java实现单链表的插入和删除

    链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方 ...

  3. C语言实现单链表节点的删除(带头结点)

    我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...

  4. 数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)

    链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表.   一.单链表 插入:链表中插入一个节点的效率很高.向链表中插 ...

  5. 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】

    本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...

  6. 单链表创建、删除、查找、插入之C语言实现

    本文将详细的介绍C语言单链表的创建.删除.查找.插入以及输出功能 一.创建 #include<stdio.h> #include<stdlib.h> typedef int E ...

  7. 【剑指offer】单链表尾部插入一个节点

    #include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...

  8. 单链表的插入伪算法和用C语言创建单链表,并遍历

    非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...

  9. Linux C++ 单链表添加,删除,输出,逆序操作

    /*单链表操作*/#include <iostream>using namespace std; class Node{ public: Node(){ next=0; } Node(in ...

随机推荐

  1. 瀑布流布局(等宽不等高jQuery)

    在百度上看见的好多都是引用Masonry插件   ,之后我自己尝试了一个没有使用插件的 <body> <div id="main"> <div cla ...

  2. 使用shiro的密码服务模块

    http://jinnianshilongnian.iteye.com/blog/2021439 http://www.cnblogs.com/snidget/p/3817763.html

  3. istio-mix介绍

    mixer 概念 Mixer 是负责提供策略控制和遥测收集的 Istio 组件: 在每次请求执行先决条件检查之前以及在每次报告遥测请求之后,Envoy sidecar 在逻辑上调用 Mixer. 主要 ...

  4. Windows Socket 编程_单个服务器对多个客户端简单通讯

    单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题 一.简要说明: 程序名为:TcpSocketOneServerToMulClient 程序功能:实 ...

  5. docker 安装elasticSearch7.0.0

    一.执行命令:docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-n ...

  6. elasticSearch安装 Kibana安装 Sense安装

    安装最新版本,安装6.*版本 先提示一个重要的事情,kibana新版本不需要安装Sense, 官方的是老版的Kibana才需要,我们现在用devTool http://localhost:5601/a ...

  7. 解决MySQL数据库连接太多,多数Sleep

    1.查看当前所有连接的详细资料: mysqladmin -uroot -proot processlist 客户端使用: show full processlist 2.只查看当前连接数(Thread ...

  8. jieba库与词云的使用——以孙子兵法为例

    1.打开cmd安装jieba库和 matplotlib. 2.打开python,输入代码.代码如下: from wordcloud import WordCloud import matplotlib ...

  9. linux下sort命令详解

    1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出. [rocrocket@rocrocket progr ...

  10. PHP基础入门(五)---PHP面向对象实用基础知识

    前言: 今天来和大家介绍一下PHP的面向对象.说到面向对象,我不得不提一下面向过程,因为本人在初学时,常常分不清楚面向对象和面向过程,下面就来给大家介绍一下它们的区别: 面向对象专注于由哪个对象来处理 ...