1.以“工具设计者”角色,给出“顺序线性表”的创建Create、显示Display、插 入Insert、删除Delete; 2.以“工具设计者”角色,给出“链式线性表”的创建Create、显示Display、插 入Insert、删除Delete、合并Merge接口函数, 3.以“用户”角色,编写测试函数,并给出测试数据和测试结果。需要以上要求的代码
时间: 2023-06-14 15:03:40 浏览: 117
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
```
阅读全文