#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
// 初始化顺序表
void init(SeqList *L) {
L->length = 0;
}
// 求顺序表的长度
int length(SeqList L) {
return L.length;
}
// 查找元素
int search(SeqList L, int value) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == value) {
return i;
}
}
return -1;
}
// 插入元素
int insert(SeqList *L, int index, int value) {
if (index < 0 || index > L->length || L->length >= MAX_SIZE) {
return 0;
}
for (int i = L->length - 1; i >= index; i--) {
L->data[i + 1] = L->data[i];
}
L->data[index] = value;
L->length++;
return 1;
}
// 删除元素
int delete(SeqList *L, int index) {
if (index < 0 || index >= L->length) {
return 0;
}
for (int i = index; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1];
}
L->length--;
return 1;
}
// 输出顺序表
void print(SeqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 销毁顺序表
void destroy(SeqList *L) {
L->length = 0;
}
// 逆序顺序表
void reverse(SeqList *L) {
for (int i = 0; i < L->length / 2; i++) {
int temp = L->data[i];
L->data[i] = L->data[L->length - i - 1];
L->data[L->length - i - 1] = temp;
}
}
// 合并顺序表
void merge(SeqList *L1, SeqList L2) {
for (int i = 0; i < L2.length; i++) {
insert(L1, L1->length, L2.data[i]);
}
}
int main() {
SeqList L1, L2;
init(&L1);
init(&L2);
// 测试初始化、插入、删除、查找、求表长、输出、销毁、逆序、合并功能
insert(&L1, 0, 1);
insert(&L1, 1, 3);
insert(&L1, 2, 5);
insert(&L1, 3, 7);
printf("L1: ");
print(L1);
insert(&L2, 0, 2);
insert(&L2, 1, 4);
insert(&L2, 2, 6);
insert(&L2, 3, 8);
printf("L2: ");
print(L2);
delete(&L1, 1);
// 输出删除后的 L1
printf("L1 after delete: ");
print(L1);
int index = search(L1, 5);
if (index != -1) {
printf("5 is found at index %d in L1.\n", index);
} else {
printf("5 is not found in L1.\n");
}
int len = length(L1);
printf("L1's length is %d.\n", len);
reverse(&L1);
printf("L1 reversed: ");
print(L1);
merge(&L1, L2);
printf("L1 merged with L2: ");
print(L1);
destroy(&L1);
destroy(&L2);
return 0;
}
C语言实现顺序表
最新推荐文章于 2024-10-16 00:00:43 发布