实现线性表的顺序存储定义,完成顺序表的创建、插入、删除、查找、排序等常用操作,完成两个有序线性表的合并,要求同样的数据元素只出现一次。
时间: 2023-06-20 12:06:49 浏览: 66
1.线性表的顺序存储定义:
```c++
#define MAXSIZE 100 // 定义线性表最大长度
typedef struct {
int data[MAXSIZE]; // 存储数据元素
int length; // 线性表当前长度
} SeqList;
```
2.顺序表的创建:
```c++
void createList(SeqList &L, int a[], int n) {
for (int i = 0; i < n; i++) {
L.data[i] = a[i];
}
L.length = n;
}
```
3.顺序表的插入:
```c++
bool insertList(SeqList &L, int pos, int x) {
if (pos < 1 || pos > L.length + 1) return false; // 判断插入位置是否合法
if (L.length >= MAXSIZE) return false; // 判断线性表是否已满
for (int i = L.length; i >= pos; i--) {
L.data[i] = L.data[i - 1];
}
L.data[pos - 1] = x;
L.length++;
return true;
}
```
4.顺序表的删除:
```c++
bool deleteList(SeqList &L, int pos) {
if (pos < 1 || pos > L.length) return false; // 判断删除位置是否合法
for (int i = pos; i < L.length; i++) {
L.data[i - 1] = L.data[i];
}
L.length--;
return true;
}
```
5.顺序表的查找:
```c++
int searchList(SeqList L, int x) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == x) {
return i + 1;
}
}
return 0;
}
```
6.顺序表的排序:
```c++
void sortList(SeqList &L) {
for (int i = 0; i < L.length - 1; i++) {
for (int j = i + 1; j < L.length; j++) {
if (L.data[i] > L.data[j]) {
int temp = L.data[i];
L.data[i] = L.data[j];
L.data[j] = temp;
}
}
}
}
```
7.两个有序线性表的合并:
```c++
void mergeList(SeqList L1, SeqList L2, SeqList &L3) {
int i = 0, j = 0, k = 0;
while (i < L1.length && j < L2.length) {
if (L1.data[i] < L2.data[j]) {
L3.data[k++] = L1.data[i++];
} else if (L1.data[i] > L2.data[j]) {
L3.data[k++] = L2.data[j++];
} else {
L3.data[k++] = L1.data[i++];
j++;
}
}
while (i < L1.length) {
L3.data[k++] = L1.data[i++];
}
while (j < L2.length) {
L3.data[k++] = L2.data[j++];
}
L3.length = k;
for (int m = 0; m < L3.length - 1; m++) { // 去重
for (int n = m + 1; n < L3.length; n++) {
if (L3.data[m] == L3.data[n]) {
for (int p = n; p < L3.length - 1; p++) {
L3.data[p] = L3.data[p + 1];
}
L3.length--;
n--;
}
}
}
}
```