实现一个可以用菜单控制,用动态存储实现单链表的创建,单链表的插入,单链表的删除,单链表的查找和单链表的显示,并且可以将顺序表LA和lb的数据元素按非递减有序排列,以及将LA和lb归并为一个新的顺序表Lc而且,Lc中的元素仍然按非递减有序排列

时间: 2023-05-27 18:04:44 浏览: 70
这是一个较为复杂的题目,需要多个函数之间的协作。下面给出一个简单的实现。 ```c++ #include <iostream> using namespace std; // 定义链表节点结构体 struct Node { int data; // 数据域 Node* next; // 指针域,指向下一个节点 }; // 创建链表 Node* createList(){ Node* head = NULL; // 链表头指针初始化为NULL,表示链表为空 Node* tail = NULL; // 链表尾指针初始化为NULL,表示尾节点还没有确定 int x; cout << "请输入链表的元素,输入-1结束:" << endl; cin >> x; while (x != -1) { // 当输入-1时停止输入 Node* p = new Node; // 创建新的节点 p->data = x; // 设置节点的数据域 p->next = NULL; // 设置节点的指针域,指向NULL if (head == NULL) { // 当前链表为空,将头指针指向新节点 head = p; tail = p; // 初始化尾指针 } else { // 当前链表不为空,将尾指针指向新节点 tail->next = p; tail = p; } cin >> x; // 继续输入下一个元素 } return head; // 返回链表头指针 } // 在链表中插入元素 void insertNode(Node* head) { int pos, x; cout << "请输入要插入元素的位置和数值:" << endl; cin >> pos >> x; Node* p = new Node; // 创建新节点 p->data = x; // 设置节点的数据域 if (pos == 1) { // 插入为头节点 p->next = head; head = p; // 更新头指针 } else { // 插入为非头节点 Node* q = head; int i = 1; while (i < pos - 1 && q != NULL) { // 找到插入位置的前一个节点 q = q->next; i++; } if (q == NULL) { // 找不到插入位置 cout << "插入位置错误!" << endl; } else { p->next = q->next; q->next = p; } } // 输出插入后的链表 cout << "插入后的链表为:" << endl; Node* q = head; while (q != NULL) { cout << q->data << " "; q = q->next; } cout << endl; } // 在链表中删除元素 void deleteNode(Node* head) { int pos; cout << "请输入要删除元素的位置:" << endl; cin >> pos; if (pos == 1) { // 删除头节点 head = head->next; } else { // 删除非头节点 Node* p = head; int i = 1; while (i < pos - 1 && p != NULL) { // 找到删除位置的前一个节点 p = p->next; i++; } if (p == NULL || p->next == NULL) { // 找不到删除位置 cout << "删除位置错误!" << endl; } else { Node* q = p->next; p->next = q->next; delete q; } } // 输出删除后的链表 cout << "删除后的链表为:" << endl; Node* q = head; while (q != NULL) { cout << q->data << " "; q = q->next; } cout << endl; } // 在链表中查找元素 void searchNode(Node* head) { int x; cout << "请输入要查找的元素:" << endl; cin >> x; Node* p = head; int i = 1; while (p != NULL && p->data != x) { // 查找节点 p = p->next; i++; } if (p == NULL) { // 没有找到 cout << "查找不到该元素!" << endl; } else { cout << "该元素在链表中的位置为:" << i << endl; } } // 显示链表的元素 void displayList(Node* head) { cout << "链表的元素为:" << endl; Node* p = head; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } // 将两个有序数组合并为一个新的有序数组 void mergeArray(int A[], int B[], int C[], int n, int m) { int i = 0, j = 0, k = 0; while (i < n && j < m) { // 依次将A和B中的较小元素加入C中 if (A[i] <= B[j]) { C[k] = A[i]; i++; } else { C[k] = B[j]; j++; } k++; } while (i < n) { // 将A中剩余的元素加入C中 C[k] = A[i]; i++; k++; } while (j < m) { // 将B中剩余的元素加入C中 C[k] = B[j]; j++; k++; } } int main() { Node* head = NULL; // 链表头指针初始化为NULL int choice; do { cout << "请选择要进行的操作:" << endl; cout << "1. 创建链表" << endl; cout << "2. 在链表中插入元素" << endl; cout << "3. 在链表中删除元素" << endl; cout << "4. 在链表中查找元素" << endl; cout << "5. 显示链表中的元素" << endl; cout << "6. 合并两个有序数组" << endl; cout << "0. 退出" << endl; cin >> choice; switch (choice) { case 1: head = createList(); // 创建链表 break; case 2: insertNode(head); // 在链表中插入元素 break; case 3: deleteNode(head); // 在链表中删除元素 break; case 4: searchNode(head); // 在链表中查找元素 break; case 5: displayList(head); // 显示链表中的元素 break; case 6: { int n, m; cout << "请输入数组A和数组B的元素个数:" << endl; cin >> n >> m; int A[n], B[m], C[n+m]; cout << "请输入数组A的元素:" << endl; for (int i = 0; i < n; i++) { cin >> A[i]; } cout << "请输入数组B的元素:" << endl; for (int i = 0; i < m; i++) { cin >> B[i]; } // 将A和B合并为C,C中元素按非递减有序排列 mergeArray(A, B, C, n, m); cout << "合并后的数组为:" << endl; for (int i = 0; i < n + m; i++) { cout << C[i] << " "; } cout << endl; break; } case 0: break; default: cout << "输入的操作不存在,请重新输入!" << endl; break; } } while (choice != 0); return 0; } ```

相关推荐

最新推荐

recommend-type

C#实现Winform动态添加菜单的方法

主要介绍了C#实现Winform动态添加菜单的方法,涉及C#操作菜单的技巧,需要的朋友可以参考下
recommend-type

layui递归实现动态左侧菜单

主要为大家详细介绍了layui递归实现动态左侧菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C# 实现dataGridView选中一行右键出现菜单的示例代码

主要介绍了C# 实现dataGridView选中一行右键出现菜单,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

vue实现后台管理权限系统及顶栏三级菜单显示功能

主要介绍了vue实现后台管理权限系统及顶栏三级菜单显示功能,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

单片机C语言下LCD多级菜单的一种实现方法

绍了在C 语言环境下,在LCD液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个 结构紧凑、实用的程序模型。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。