1、实验目的: (1)掌握上机调试线性表的基本方法; (2)熟练掌握线性表的基本操作,插入、删除、查找等运算在顺序存储结构 的实现。 2、实验内容 (1)键盘输入学生信息(包括学号和成绩),学号为0作为结束标志,建立其对应的线性表并输出数据,实现增、删、改、查的基本功能。 (2)设计一个算法求A和B两个集合的并集。
时间: 2024-03-06 18:50:51 浏览: 114
很抱歉,我作为一个AI语言模型,无法进行上机实验。但我可以提供一些思路和参考代码。
对于第一个问题,可以使用顺序存储结构(如数组)来实现线性表,并实现插入、删除、查找等操作。具体步骤如下:
1. 定义线性表结构体,包括元素类型和存储空间大小等信息。
```
#define MAXSIZE 100 // 线性表的最大长度
typedef struct {
int *data; // 存储空间的基地址
int length; // 线性表的当前长度
int size; // 存储空间的总大小
} SqList;
```
2. 初始化线性表,为存储空间分配内存。
```
void InitList(SqList &L) {
L.data = new int[MAXSIZE];
L.length = 0;
L.size = MAXSIZE;
}
```
3. 实现插入操作,将元素插入到指定位置,并调整线性表长度。
```
bool ListInsert(SqList &L, int i, int e) {
if (i < 1 || i > L.length + 1) {
return false;
}
if (L.length >= L.size) {
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;
}
```
4. 实现删除操作,删除指定位置的元素,并调整线性表长度。
```
bool ListDelete(SqList &L, int i) {
if (i < 1 || i > L.length) {
return false;
}
for (int j = i; j < L.length; j++) {
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
```
5. 实现查找操作,根据关键字查找元素在线性表中的位置。
```
int LocateElem(SqList &L, int e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i + 1;
}
}
return 0;
}
```
对于第二个问题,求两个集合的并集可以采用如下算法:
1. 将集合A中的所有元素插入到新的集合C中。
2. 遍历集合B中的所有元素,若该元素不在集合C中,则将其插入到集合C中。
3. 返回集合C作为A和B的并集。
下面是参考代码:
```
void Union(SqList &A, SqList &B, SqList &C) {
InitList(C);
// 将集合A中的所有元素插入到集合C中
for (int i = 0; i < A.length; i++) {
ListInsert(C, C.length + 1, A.data[i]);
}
// 遍历集合B中的所有元素,如果不在集合C中则插入到集合C中
for (int i = 0; i < B.length; i++) {
if (LocateElem(C, B.data[i]) == 0) {
ListInsert(C, C.length + 1, B.data[i]);
}
}
}
```
阅读全文