顺序表是一种基于数组实现的线性表,它的特点是随机存储,可以随机访问任意位置的元素。以下是一个简单的顺序表的实现(C语言版)。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 最大容量
typedef struct {
int data[MAXSIZE]; // 数据元素
int length; // 当前长度
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = 0;
}
// 判断顺序表是否为空
int isEmpty(SqList *L) {
return L->length == 0 ? 1 : 0;
}
// 获取顺序表长度
int getLength(SqList *L) {
return L->length;
}
// 获取指定位置的元素
int getElem(SqList *L, int i) {
if (i < 1 || i > L->length) {
printf("Error: Index out of range.\n");
exit(1);
}
return L->data[i-1];
}
// 在指定位置插入元素
void insertElem(SqList *L, int i, int e) {
if (i < 1 || i > L->length+1 || L->length == MAXSIZE) {
printf("Error: Index out of range or list is full.\n");
exit(1);
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j-1];
}
L->data[i-1] = e;
L->length++;
}
// 删除指定位置的元素
void deleteElem(SqList *L, int i) {
if (i < 1 || i > L->length) {
printf("Error: Index out of range.\n");
exit(1);
}
for (int j = i; j < L->length; j++) {
L->data[j-1] = L->data[j];
}
L->length--;
}
// 输出顺序表中的所有元素
void printList(SqList *L) {
printf("List: ");
for (int i = 0; i < L->length; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
int main() {
SqList L;
InitList(&L);
// 插入元素
insertElem(&L, 1, 1);
insertElem(&L, 2, 2);
insertElem(&L, 3, 3);
insertElem(&L, 4, 4);
insertElem(&L, 5, 5);
printList(&L); // List: 1 2 3 4 5
// 删除元素
deleteElem(&L, 3);
printList(&L); // List: 1 2 4 5
// 获取元素
printf("Element at index 2 is %d\n", getElem(&L, 2)); // Element at index 2 is 2
// 获取长度
printf("Length of the list is %d\n", getLength(&L)); // Length of the list is 4
return 0;
}
在这个实现中,我们使用结构体 SqList 来表示顺序表,其中 data 数组表示数据元素,length
表示当前长度。我们实现了初始化顺序表、判断顺序表是否为空、获取顺序表长度、获取指定位置的元素、在指定位置插入元素、删除指定位置的元素、输出顺序表中所有元素等操作。