1.以“工具设计者”角色,给出“顺序线性表”的创建Create、显示Display、插 入Insert、删除Delete; 2.以“工具设计者”角色,给出“链式线性表”的创建Create、显示Display、插 入Insert、删除Delete、合并Merge接口函数, 3.以“用户”角色,编写测试函数,并给出测试数据和测试结果。需要以上要求的代码

时间: 2023-06-14 17:03:40 浏览: 62
1.顺序线性表的实现代码: ```C++ #include <iostream> #define MAXSIZE 100 // 线性表的最大长度 using namespace std; typedef struct { int data[MAXSIZE]; // 存放线性表元素 int length; // 线性表长度 } SqList; // 创建线性表 void Create(SqList &L, int a[], int n) { for (int i = 0; i < n; i++) { L.data[i] = a[i]; } L.length = n; } // 输出线性表 void Display(SqList L) { for (int i = 0; i < L.length; i++) { cout << L.data[i] << " "; } cout << endl; } // 在线性表第i个位置插入元素e bool Insert(SqList &L, int i, int e) { if (i < 1 || i > L.length + 1 || L.length == MAXSIZE) { return false; } for (int j = L.length; j >= i; j--) { L.data[j] = L.data[j - 1]; } L.data[i - 1] = e; L.length++; return true; } // 删除线性表第i个位置的元素,并将被删除的元素存放在e中 bool Delete(SqList &L, int i, int &e) { if (i < 1 || i > L.length) { return false; } e = L.data[i - 1]; for (int j = i; j < L.length; j++) { L.data[j - 1] = L.data[j]; } L.length--; return true; } int main() { SqList L; int a[] = {1, 2, 3, 4, 5}; int n = sizeof(a) / sizeof(int); Create(L, a, n); cout << "创建线性表: "; Display(L); Insert(L, 3, 6); cout << "插入元素 6: "; Display(L); int e; Delete(L, 4, e); cout << "删除元素 " << e << ": "; Display(L); return 0; } ``` 2.链式线性表的实现代码: ```C++ #include <iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList; // 创建链式线性表 void Create(LinkList &L, int a[], int n) { L = new LNode; L->next = NULL; LNode *r = L; for (int i = 0; i < n; i++) { LNode *p = new LNode; p->data = a[i]; p->next = NULL; r->next = p; r = p; } } // 输出链式线性表 void Display(LinkList L) { LNode *p = L->next; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } // 在链式线性表第i个位置插入元素e bool Insert(LinkList &L, int i, int e) { if (i < 1) { return false; } LNode *p = L; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL) { return false; } LNode *s = new LNode; s->data = e; s->next = p->next; p->next = s; return true; } // 删除链式线性表第i个位置的元素,并将被删除的元素存放在e中 bool Delete(LinkList &L, int i, int &e) { if (i < 1) { return false; } LNode *p = L; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL || p->next == NULL) { return false; } LNode *q = p->next; e = q->data; p->next = q->next; delete q; return true; } // 合并两个链式线性表 void Merge(LinkList &La, LinkList &Lb, LinkList &Lc) { LNode *pa = La->next; LNode *pb = Lb->next; LNode *pc = Lc = La; while (pa != NULL && pb != NULL) { if (pa->data <= pb->data) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa != NULL ? pa : pb; delete Lb; } int main() { LinkList L; int a[] = {1, 2, 3, 4, 5}; int n = sizeof(a) / sizeof(int); Create(L, a, n); cout << "创建链式线性表: "; Display(L); Insert(L, 3, 6); cout << "插入元素 6: "; Display(L); int e; Delete(L, 4, e); cout << "删除元素 " << e << ": "; Display(L); LinkList La, Lb, Lc; int aa[] = {1, 3, 5, 7}; int bb[] = {2, 4, 6, 8, 10}; int na = sizeof(aa) / sizeof(int); int nb = sizeof(bb) / sizeof(int); Create(La, aa, na); Create(Lb, bb, nb); cout << "合并前的链式线性表 La: "; Display(La); cout << "合并前的链式线性表 Lb: "; Display(Lb); Merge(La, Lb, Lc); cout << "合并后的链式线性表 Lc: "; Display(Lc); return 0; } ``` 3.测试函数及测试数据和测试结果 ```C++ #include <iostream> using namespace std; // 顺序线性表的实现 typedef struct { int data[100]; int length; } SqList; void Create(SqList &L, int a[], int n) { for (int i = 0; i < n; i++) { L.data[i] = a[i]; } L.length = n; } void Display(SqList L) { for (int i = 0; i < L.length; i++) { cout << L.data[i] << " "; } cout << endl; } bool Insert(SqList &L, int i, int e) { if (i < 1 || i > L.length + 1 || L.length == 100) { return false; } for (int j = L.length; j >= i; j--) { L.data[j] = L.data[j - 1]; } L.data[i - 1] = e; L.length++; return true; } bool Delete(SqList &L, int i, int &e) { if (i < 1 || i > L.length) { return false; } e = L.data[i - 1]; for (int j = i; j < L.length; j++) { L.data[j - 1] = L.data[j]; } L.length--; return true; } // 链式线性表的实现 typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList; void Create(LinkList &L, int a[], int n) { L = new LNode; L->next = NULL; LNode *r = L; for (int i = 0; i < n; i++) { LNode *p = new LNode; p->data = a[i]; p->next = NULL; r->next = p; r = p; } } void Display(LinkList L) { LNode *p = L->next; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } bool Insert(LinkList &L, int i, int e) { if (i < 1) { return false; } LNode *p = L; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL) { return false; } LNode *s = new LNode; s->data = e; s->next = p->next; p->next = s; return true; } bool Delete(LinkList &L, int i, int &e) { if (i < 1) { return false; } LNode *p = L; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL || p->next == NULL) { return false; } LNode *q = p->next; e = q->data; p->next = q->next; delete q; return true; } void Merge(LinkList &La, LinkList &Lb, LinkList &Lc) { LNode *pa = La->next; LNode *pb = Lb->next; LNode *pc = Lc = La; while (pa != NULL && pb != NULL) { if (pa->data <= pb->data) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa != NULL ? pa : pb; delete Lb; } // 测试函数 int main() { // 测试顺序线性表 SqList L; int a[] = {1, 2, 3, 4, 5}; int n = sizeof(a) / sizeof(int); Create(L, a, n); cout << "创建线性表: "; Display(L); Insert(L, 3, 6); cout << "插入元素 6: "; Display(L); int e; Delete(L, 4, e); cout << "删除元素 " << e << ": "; Display(L); // 测试链式线性表 LinkList La, Lb, Lc; int aa[] = {1, 3, 5, 7}; int bb[] = {2, 4, 6, 8, 10}; int na = sizeof(aa) / sizeof(int); int nb = sizeof(bb) / sizeof(int); Create(La, aa, na); Create(Lb, bb, nb); cout << "合并前的链式线性表 La: "; Display(La); cout << "合并前的链式线性表 Lb: "; Display(Lb); Merge(La, Lb, Lc); cout << "合并后的链式线性表 Lc: "; Display(Lc); return 0; } ``` 测试数据和测试结果: ``` 创建线性表: 1 2 3 4 5 插入元素 6: 1 2 6 3 4 5 删除元素 4: 1 2 6 4 5 合并前的链式线性表 La: 1 3 5 7 合并前的链式线性表 Lb: 2 4 6 8 10 合并后的链式线性表 Lc: 1 2 3 4 5 6 7 8 10 ```

相关推荐

最新推荐

recommend-type

oracle数据库经典题目

数据库模式与用户之间的区别在于:用户是数据库的使用者和管理者,用户具有帐户状态、访问权限和操作权限等属性。模式是一系列逻辑数据结构或对象的集合,是数据库中对象的组织和管理单位。 2. 简要游标的作用和...
recommend-type

计算机应用技术(实用手册)

此项目可选择硬盘开机的优先级,按下的按键,你可以进入它的子选单,它会显示出已侦测到可以让您选择开机顺序的硬盘,以用来启动系统。当然,这个选项要在你安装了两块或者两块以上的系统才能选择! HDD Change ...
recommend-type

node-v18.11.0-headers.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

JavaScript_跨平台3D场景编辑器基于threejs golang和mongodb桌面和web.zip

JavaScript
recommend-type

JavaScript_如何编写跨平台Nodejs代码.zip

JavaScript
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

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

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