• 创建单链表,并对单链表的数据进行增、删、改、查、数据输入、打印等操作(C++)


    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    题目:

    目录

    题目:

    一、创建单链表

    二、单链表的初始化

    三、单链表的取值

    四、单链表的查找

    五、单链表的插入

    六、单链表的删除

    七、单链表的输入数据

    八、单链表输出所数据

    九、输出单链表的表长

    十、输出最大值

    全部代码:

    结果:

    总结


    一、填充函数ShowList实现将单链表的所有元素输出出来。

    二、填充函数ListLength实现单链表的求表长操作,返回链表的表长。

    三、主函数:

    1) 建立单链表。建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链表建立的基本操作。

    2)将该单链表的所有元素显示出来。

    3)取值。在已建好的单链表中的第3个位置(i=3)取出元素的值并输出。

    4)查找。在链表中找等于2和等于100的元素,并显示相关信息。

    5) 插入元素。在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插入的基本操作,并将该单链表的所有元素显示出来。

    6) 删除元素。在一个包括头结点的单链表的指定位置(如i=2)删除一个结点,实现单链表删除的基本操作,并将该单链表的所有元素显示出来。

    7)输出该单链表的表长。

    8)取最大值。设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。

    一、创建单链表

    1. typedef struct LNode {
    2. ElemType data; //结点的数据域
    3. struct LNode *next; //结点的指针域
    4. } L

    二、单链表的初始化

    1. Status InitList(LinkList &L) { //算法2.6 单链表的初始化
    2. //构造一个空的单链表L
    3. L = new LNode; //生成新结点作为头结点,用头指针L指向头结点
    4. L->next = NULL; //头结点的指针域置空
    5. return OK;
    6. }

    三、单链表的取值

    1. Status GetElem(LinkList L, int i, ElemType &e) { //算法2.7 单链表的取值
    2. //在带头结点的单链表L中查找第i个元素
    3. //用e返回L中第i个数据元素的值
    4. int j;
    5. LinkList p;
    6. p=L->next;j=1;
    7. while(p&&j
    8. {
    9. p=p->next;
    10. ++j;
    11. }
    12. if(!p||j>i)return ERROR;
    13. e=p->data;
    14. cout<
    15. return OK;
    16. //TODO
    17. } //GetElem

    四、单链表的查找

    1. LNode *LocateElem(LinkList L, ElemType e) { //算法2.8 按值查找
    2. //在带头结点的单链表L中查找值为e的元素
    3. //TODO
    4. LinkList p;
    5. //LinkList p;
    6. p=L->next;
    7. int i=0;
    8. while(p&&p->data!=e)
    9. {
    10. p=p->next;
    11. i++;
    12. }
    13. return p;
    14. } //LocateElem

    五、单链表的插入

    1. Status ListInsert(LinkList &L, int i, ElemType e) { //算法2.9 单链表的插入
    2. //在带头结点的单链表L中第i个位置插入值为e的新结点
    3. int j;
    4. LinkList p, s;
    5. p=L;j=0;
    6. while(p&&(j-1))
    7. {
    8. p=p->next;++j;
    9. }
    10. if(!p||j>i-1)return ERROR;
    11. s=new LNode;
    12. s->data=e;
    13. s->next=p->next;
    14. p->next=s;
    15. return OK;
    16. //TODO
    17. } //ListInsert

    六、单链表的删除

    1. Status ListDelete(LinkList &L, int i) { //算法2.9 单链表的删除
    2. //在带头结点的单链表L中,删除第i个位置
    3. LinkList p, q;
    4. int j;
    5. p = L;
    6. j = 0;
    7. while((p->next)&&(j-1))
    8. {
    9. p=p->next;++j;
    10. }
    11. if(!(p->next)||(j>i-1))return ERROR;
    12. q=p->next;
    13. p->next=q->next;
    14. delete q;
    15. return OK;
    16. //TODO
    17. } //ListDelete

    七、单链表的输入数据

    1. void CreateList_H(LinkList &L, int n) { //算法2.11 前插法创建单链表
    2. //逆位序输入n个元素的值,建立到头结点的单链表L(单链表的输入)
    3. LinkList p;
    4. L=new LNode;
    5. L->next=NULL;
    6. cout<<"请输入数据(以空格隔开):"<
    7. for(int i=0;i
    8. {
    9. p=new LNode;
    10. cin>>p->data;
    11. p->next=L->next;L->next=p;
    12. }
    13. //TODO
    14. } //CreateList_H
    1. void CreateList_R(LinkList &L, int n) { //算法2.12 后插法创建单链表
    2. //正位序输入n个元素的值,建立带表头结点的单链表L(单链表的输入)
    3. //TO DO
    4. LinkList p,r;
    5. int i;
    6. L=new LNode;
    7. L->next=NULL;
    8. r=L;
    9. cout<<"请输入数据(以空格隔开):"<
    10. for(i=0;i
    11. {
    12. p=new LNode;
    13. cin>>p->data;
    14. p->next=NULL;r->next=p;
    15. r=p;
    16. }
    17. } //CreateList_R

    八、单链表输出所数据

    1. void ShowList(LinkList L)
    2. {//将该单链表的所有元素显示出来
    3. LinkList p;
    4. p=L->next;
    5. while(p->next!=NULL)
    6. {
    7. cout<data<<" ";
    8. p=p->next;
    9. }
    10. cout<data<
    11. }

    九、输出单链表的表长

    1. int ListLength(LinkList L)
    2. {//实现单链表的求表长操作
    3. //TODO
    4. LinkList p;
    5. int ListLength=1;
    6. p=L->next;
    7. while(p->next!=NULL)
    8. {
    9. ListLength++;
    10. p=p->next;
    11. }
    12. cout<
    13. }

    十、输出最大值

    1. int Max(LinkList L)//求最大值
    2. {
    3. LinkList p,max;
    4. p=L->next;
    5. max=p;
    6. while(p!=NULL)
    7. {
    8. if(p->data>max->data)
    9. max=p;
    10. p=p->next;
    11. }
    12. return max->data;
    13. }

    全部代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. #define OK 1
    7. #define ERROR 0
    8. #define OVERFLOW -2
    9. typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
    10. typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
    11. typedef struct LNode {
    12. ElemType data; //结点的数据域
    13. struct LNode *next; //结点的指针域
    14. } LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
    15. Status InitList(LinkList &L) { //算法2.6 单链表的初始化
    16. //构造一个空的单链表L
    17. L = new LNode; //生成新结点作为头结点,用头指针L指向头结点
    18. L->next = NULL; //头结点的指针域置空
    19. return OK;
    20. }
    21. Status GetElem(LinkList L, int i, ElemType &e) { //算法2.7 单链表的取值
    22. //在带头结点的单链表L中查找第i个元素
    23. //用e返回L中第i个数据元素的值
    24. int j;
    25. LinkList p;
    26. p=L->next;j=1;
    27. while(p&&j
    28. {
    29. p=p->next;
    30. ++j;
    31. }
    32. if(!p||j>i)return ERROR;
    33. e=p->data;
    34. cout<
    35. return OK;
    36. //TODO
    37. } //GetElem
    38. LNode *LocateElem(LinkList L, ElemType e) { //算法2.8 按值查找
    39. //在带头结点的单链表L中查找值为e的元素
    40. //TODO
    41. LinkList p;
    42. //LinkList p;
    43. p=L->next;
    44. int i=0;
    45. while(p&&p->data!=e)
    46. {
    47. p=p->next;
    48. i++;
    49. }
    50. return p;
    51. } //LocateElem
    52. Status ListInsert(LinkList &L, int i, ElemType e) { //算法2.9 单链表的插入
    53. //在带头结点的单链表L中第i个位置插入值为e的新结点
    54. int j;
    55. LinkList p, s;
    56. p=L;j=0;
    57. while(p&&(j-1))
    58. {
    59. p=p->next;++j;
    60. }
    61. if(!p||j>i-1)return ERROR;
    62. s=new LNode;
    63. s->data=e;
    64. s->next=p->next;
    65. p->next=s;
    66. return OK;
    67. //TODO
    68. } //ListInsert
    69. Status ListDelete(LinkList &L, int i) { //算法2.9 单链表的删除
    70. //在带头结点的单链表L中,删除第i个位置
    71. LinkList p, q;
    72. int j;
    73. p = L;
    74. j = 0;
    75. while((p->next)&&(j-1))
    76. {
    77. p=p->next;++j;
    78. }
    79. if(!(p->next)||(j>i-1))return ERROR;
    80. q=p->next;
    81. p->next=q->next;
    82. delete q;
    83. return OK;
    84. //TODO
    85. } //ListDelete
    86. void CreateList_H(LinkList &L, int n) { //算法2.11 前插法创建单链表
    87. //逆位序输入n个元素的值,建立到头结点的单链表L(单链表的输入)
    88. LinkList p;
    89. L=new LNode;
    90. L->next=NULL;
    91. cout<<"请输入数据(以空格隔开):"<
    92. for(int i=0;i
    93. {
    94. p=new LNode;
    95. cin>>p->data;
    96. p->next=L->next;L->next=p;
    97. }
    98. //TODO
    99. } //CreateList_H
    100. void CreateList_R(LinkList &L, int n) { //算法2.12 后插法创建单链表
    101. //正位序输入n个元素的值,建立带表头结点的单链表L(单链表的输入)
    102. //TO DO
    103. LinkList p,r;
    104. int i;
    105. L=new LNode;
    106. L->next=NULL;
    107. r=L;
    108. cout<<"请输入数据(以空格隔开):"<
    109. for(i=0;i
    110. {
    111. p=new LNode;
    112. cin>>p->data;
    113. p->next=NULL;r->next=p;
    114. r=p;
    115. }
    116. } //CreateList_R
    117. void ShowList(LinkList L)
    118. {//将该单链表的所有元素显示出来
    119. LinkList p;
    120. p=L->next;
    121. while(p->next!=NULL)
    122. {
    123. cout<data<<" ";
    124. p=p->next;
    125. }
    126. cout<data<
    127. }
    128. int ListLength(LinkList L)
    129. {//实现单链表的求表长操作
    130. //TODO
    131. LinkList p;
    132. int ListLength=1;
    133. p=L->next;
    134. while(p->next!=NULL)
    135. {
    136. ListLength++;
    137. p=p->next;
    138. }
    139. cout<
    140. }
    141. int paixun(LinkList L)//排序
    142. {
    143. LinkList p,r,temp,q;
    144. p=L->next;
    145. while(p != NULL) {
    146. q = r;
    147. temp = p;
    148. p = p->next;//指向第一个;
    149. if(q != NULL && q->next != NULL) {
    150. while(temp->data > q->next->data){
    151. q = q->next;
    152. }
    153. temp->next = q->next;
    154. q->next = temp;
    155. }
    156. else if(q == NULL) {
    157. cout<<"H is NULL\n";
    158. return ERROR;
    159. }
    160. else if(q->next == NULL) {
    161. temp->next = NULL;
    162. q->next = temp;
    163. }
    164. }
    165. return 0;
    166. }
    167. int Max(LinkList L)//求最大值
    168. {
    169. LinkList p,max;
    170. p=L->next;
    171. max=p;
    172. while(p!=NULL)
    173. {
    174. if(p->data>max->data)
    175. max=p;
    176. p=p->next;
    177. }
    178. return max->data;
    179. }
    180. int main() {
    181. LinkList s;
    182. int n,a;
    183. cout<<"请输入n的个数:";
    184. cin>>n;
    185. CreateList_R(s,n);
    186. cout<<"结果为:";
    187. ShowList(s);
    188. cout<<"取值,输出第三个的值为:";
    189. GetElem(s,3,a);
    190. cout<
    191. if(LocateElem(s,2)!=NULL)
    192. cout<<"找到数据2了,位置在"<LocateElem(s,2)<
    193. else
    194. cout<<"没有找到为2的数据" <
    195. if(LocateElem(s,100)!=NULL)
    196. cout<<"找到数据100了,位置在"<LocateElem(s,100)<
    197. else
    198. cout<<"没有找到为100的数据" <
    199. cout<<"在第三个位置中,插入数据3"<
    200. ListInsert(s,3,3);
    201. cout<<"结果为:";
    202. ShowList(s);
    203. cout<<"删除第二个数据:"<
    204. ListDelete(s,2);
    205. cout<<"结果为:";
    206. ShowList(s);
    207. cout<<"输出单链表的长度:";
    208. ListLength(s);
    209. cout<<"该链表中,最大值为:"<<Max(s)<
    210. //cout<<"对单链表进行排序"<
    211. //paixun(s) ;
    212. // cout<<"结果为:";
    213. //ShowList(s);
    214. return 0;
    215. }

    结果:


     

    总结

    提示:这里对文章进行总结:
    例如:以上就是今天要讲的内容,本文仅仅简单介绍了创建单链表,并对单链表的数据进行增、删、改、查、数据输入、打印等操作。

  • 相关阅读:
    【软考:系统集成项目管理】之 五组十域图
    JavaScript 生成 16: 9 宽高比
    提升媒体文字质量:常见错误及改进措施解析
    深度学习崛起十年:“开挂”的OpenAI革新者
    华为机试 - TLV解析Ⅰ
    什么是无人机全自动飞行系统?概念、构成、作用深度解析
    Kafka 基础概念及架构
    Could not resolve placeholder ‘jdbc.driver‘ in string value “${jdbc.driver}“
    进阶:编写符合Python风格的对象
    java spring cloud 企业工程管理系统源码+二次开发+定制化服务
  • 原文地址:https://blog.csdn.net/m0_65420451/article/details/126930972