使用C语言实现一个线性表
时间: 2023-07-20 22:27:38 浏览: 121
线性表是一种重要的数据结构,它可以用于存储一组具有相同数据类型的元素,并提供了一些基本的操作方式,如插入、删除、查找等。下面是使用C语言实现一个线性表的基本示例:
```
#include <stdio.h>
#include <stdlib.h>
// 定义线性表结构体
typedef struct {
int *data; // 数据指针
int length; // 线性表长度
} LinearList;
// 初始化线性表
void InitList(LinearList *L) {
L->data = (int *)malloc(100 * sizeof(int)); // 为数据分配空间
L->length = 0; // 初始化长度为 0
}
// 获取线性表长度
int GetLength(LinearList L) {
return L.length;
}
// 插入元素
void Insert(LinearList *L, int index, int value) {
// 判断插入位置是否合法
if (index < 1 || index > L->length + 1) {
printf("Error: Invalid index!\n");
return;
}
// 判断线性表是否已满,如果满了,需要扩容
if (L->length >= 100) {
printf("Error: The list is full!\n");
return;
}
// 把插入位置以及之后的元素后移一位
for (int i = L->length; i >= index; i--) {
L->data[i] = L->data[i-1];
}
// 把新元素插入到指定位置
L->data[index-1] = value;
L->length++; // 长度加 1
}
// 删除元素
void Delete(LinearList *L, int index) {
// 判断删除位置是否合法
if (index < 1 || index > L->length) {
printf("Error: Invalid index!\n");
return;
}
// 把删除位置之后的元素前移一位
for (int i = index; i < L->length; i++) {
L->data[i-1] = L->data[i];
}
L->length--; // 长度减 1
}
// 获取指定位置的元素
int GetElement(LinearList L, int index) {
// 判断位置是否合法
if (index < 1 || index > L.length) {
printf("Error: Invalid index!\n");
return -1;
}
return L.data[index-1];
}
// 输出线性表中的所有元素
void PrintList(LinearList L) {
if (L.length == 0) {
printf("The list is empty!\n");
return;
}
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
LinearList L;
InitList(&L); // 初始化线性表
Insert(&L, 1, 10); // 在第 1 个位置插入元素 10
Insert(&L, 2, 20); // 在第 2 个位置插入元素 20
Insert(&L, 1, 30); // 在第 1 个位置插入元素 30
PrintList(L); // 输出线性表中的所有元素
Delete(&L, 2); // 删除第 2 个位置的元素
PrintList(L); // 输出线性表中的所有元素
printf("The length of the list is: %d\n", GetLength(L)); // 获取线性表长度
printf("The element at position 2 is: %d\n", GetElement(L, 2)); // 获取指定位置的元素
return 0;
}
```
以上代码实现了一个基本的线性表,包括初始化、插入、删除、获取元素、输出所有元素和获取长度等操作。注意这里使用了动态内存分配来为数据分配空间,同时也需要注意插入和删除操作要对位置进行判断,以确保不会出现越界等错误。
阅读全文