顺序表是一种基于数组实现的线性表,它的特点是随机存储,可以随机访问任意位置的元素。以下是一个简单的顺序表的实现(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 4return 0;
}
在这个实现中,我们使用结构体 SqList 来表示顺序表,其中 data 数组表示数据元素,length
表示当前长度。我们实现了初始化顺序表、判断顺序表是否为空、获取顺序表长度、获取指定位置的元素、在指定位置插入元素、删除指定位置的元素、输出顺序表中所有元素等操作。