#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1024
typedef int elemtype;
typedef struct sequlist {
elemtype data[MAXSIZE];
int last;
} SequenList;
// 初始化
SequenList *Init_SequenList() {
SequenList *L = (SequenList *)malloc(sizeof(SequenList));
if (L != NULL) {
L->last = -1;
}
return L;
}
// 长度
int SequenList_Length(SequenList *L) {
return L->last + 1;
}
// 获取元素值
int Get_SequenList(SequenList *L, int i) {
if (i < 1 || i > L->last + 1) return 0;
return L->data[i - 1];
}
// 插入
int Insert_SquenList(SequenList *L, elemtype x, int i) {
if (L->last >= MAXSIZE - 1) return 0;
if (i < 1 || i > L->last + 2) return -1;
for (int j = L->last; j >= i - 1; j--) {
L->data[j + 1] = L->data[j];
}
L->data[i - 1] = x;
L->last++;
return 1;
}
// 删除
int Delete_SequenList(SequenList *L, int i) {
if (i < 1 || i > L->last + 1) return -1;
for (int j = i; j <= L->last; j++) {
L->data[j - 1] = L->data[j];
}
L->last--;
return 1;
}
// 查找
int Search_SequenList(SequenList *L, elemtype key) {
for (int i = 0; i <= L->last; i++) {
if (L->data[i] == key) return i + 1;
}
return 0;
}
void Union_SequenList(SequenList *LA, SequenList *LB) {
for (int i = 1; i <= LB->last; i++) {
elemtype lbdata = Get_SequenList(LB, i);
if (Search_SequenList(LA, lbdata) == 0) {
Insert_SquenList(LA, lbdata, LA->last + 1);
}
}
}
int main() {
SequenList *L = Init_SequenList();
int a, i, j;
printf("输入数组长度:");
scanf("%d", &a);
for (i = 0; i < a; i++) {
scanf("%d", &j);
Insert_SquenList(L, j, i + 1);
}
for (i = 0; i <= L->last; i++) {
printf("%d", L->data[i]);
if (i < L->last) printf(" ");
}
printf("\n");
// 获取数据并打印
int getData, num;
printf("输入数组位置:");
scanf("%d", &num);
getData = Get_SequenList(L, num);
printf("获取的数据: %d\n", getData);
// 删除数据并打印
int delData;
printf("请输入删除的数据位置: ");
scanf("%d", &delData);
if (Delete_SequenList(L, delData)) {
printf("删除成功\n");
printf("\n");
} else {
printf("删除失败\n");
printf("\n");
}
for (i = 0; i <= L->last; i++) {
printf("%d", L->data[i]);
if (i < L->last) printf(" ");
}
printf("\n");
// 查找数据
printf("请输入查找的数据:");
scanf("%d", &num);
if (Search_SequenList(L, num)) {
printf("查找成功,第%d元素是%d:",Search_SequenList(L, num),num);
printf("\n");
} else {
printf("查找失败\n");
}
printf("\n");
// 合并两个序列
SequenList *L2 = Init_SequenList();
printf("输入数组长度:");
scanf("%d", &a);
for (i = 0; i < a; i++) {
scanf("%d", &j);
Insert_SquenList(L2, j, i + 1);
}
Union_SequenList(L, L2);
for (i = 0; i <= L->last; i++) {
printf("%d", L->data[i]);
if (i < L->last) printf(" ");
}
// 排序联合后的个序列并打印
for (i = 0; i <= L->last; i++) {
printf("%d", L->data[i]);
if (i < L->last) printf(" ");
}
printf("\n");
free(L);
return 0;
}