实现线性表的顺序存储定义,完成顺序表的创建、插入、删除、查找、排序等常用操作,完成两个有序线性表的合并,要求同样的数据元素只出现一次。实现c语音代码
时间: 2023-10-19 07:21:47 浏览: 209
以下是基于顺序存储结构的线性表的常用操作的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义线性表最大长度
typedef int ElemType; // 定义线性表元素类型
// 定义顺序存储结构的线性表
typedef struct {
ElemType data[MAX_SIZE]; // 存储数据元素的数组
int length; // 线性表长度
} SqList;
// 初始化线性表
void InitList(SqList *L) {
L->length = 0;
}
// 获取线性表长度
int GetLength(SqList L) {
return L.length;
}
// 判断线性表是否为空
int IsEmpty(SqList L) {
return L.length == 0;
}
// 在指定位置插入元素
int Insert(SqList *L, int i, ElemType e) {
if (i < 1 || i > L->length + 1 || L->length == MAX_SIZE) {
return 0; // 插入位置不合法或线性表已满,插入失败
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j-1]; // 将插入位置及之后的元素后移一位
}
L->data[i-1] = e; // 插入新元素
L->length++; // 线性表长度增加
return 1; // 插入成功
}
// 删除指定位置的元素
int Delete(SqList *L, int i) {
if (i < 1 || i > L->length) {
return 0; // 删除位置不合法,删除失败
}
for (int j = i; j < L->length; j++) {
L->data[j-1] = L->data[j]; // 将删除位置之后的元素前移一位
}
L->length--; // 线性表长度减少
return 1; // 删除成功
}
// 查找指定元素的位置
int Find(SqList L, ElemType e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i+1; // 返回元素位置
}
}
return 0; // 未找到元素
}
// 对线性表进行冒泡排序
void BubbleSort(SqList *L) {
for (int i = 0; i < L->length-1; i++) {
for (int j = 0; j < L->length-1-i; j++) {
if (L->data[j] > L->data[j+1]) {
ElemType tmp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = tmp;
}
}
}
}
// 合并两个有序线性表
void Merge(SqList La, SqList Lb, SqList *Lc) {
int i = 0, j = 0, k = 0;
while (i < La.length && j < Lb.length) {
if (La.data[i] < Lb.data[j]) {
Lc->data[k++] = La.data[i++];
} else if (La.data[i] > Lb.data[j]) {
Lc->data[k++] = Lb.data[j++];
} else {
Lc->data[k++] = La.data[i++];
j++;
}
}
while (i < La.length) {
Lc->data[k++] = La.data[i++];
}
while (j < Lb.length) {
Lc->data[k++] = Lb.data[j++];
}
Lc->length = k; // 设置合并后的线性表长度
}
int main() {
SqList L;
InitList(&L);
Insert(&L, 1, 1);
Insert(&L, 2, 3);
Insert(&L, 3, 5);
Insert(&L, 4, 2);
Insert(&L, 5, 4);
printf("线性表元素为:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
BubbleSort(&L);
printf("排序后的线性表元素为:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
int pos = Find(L, 3);
if (pos) {
printf("元素 3 的位置为:%d\n", pos);
} else {
printf("元素 3 不存在!\n");
}
Delete(&L, 2);
printf("删除位置 2 后的线性表元素为:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
SqList L1, L2, L3;
InitList(&L1);
Insert(&L1, 1, 1);
Insert(&L1, 2, 3);
Insert(&L1, 3, 5);
InitList(&L2);
Insert(&L2, 1, 2);
Insert(&L2, 2, 4);
Insert(&L2, 3, 5);
Merge(L1, L2, &L3);
printf("合并后的线性表元素为:");
for (int i = 0; i < L3.length; i++) {
printf("%d ", L3.data[i]);
}
printf("\n");
return 0;
}
```
阅读全文