在C语言中,线性表的顺序表示通常使用数组来实现。数组中的每个元素都对应于线性表中的一个节点,并且这些元素在内存中是连续存放的。数组的索引与线性表中元素的序号是一一对应的。这种实现方式通常被称为顺序存储结构。
下面是一个简单的C语言程序,展示了如何使用数组来实现线性表的顺序表示和基本操作:
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
|
|
#define MAXSIZE 100 // 定义线性表的最大长度 |
|
|
|
typedef struct { |
|
int data[MAXSIZE]; // 存储元素的数组 |
|
int length; // 线性表的当前长度 |
|
} SeqList; |
|
|
|
// 初始化线性表 |
|
void InitList(SeqList *L) { |
|
L->length = 0; |
|
} |
|
|
|
// 插入元素 |
|
int ListInsert(SeqList *L, int i, int e) { |
|
if (i < 1 || i > L->length + 1 || L->length >= MAXSIZE) { |
|
return 0; // 插入位置不合法或线性表已满 |
|
} |
|
for (int j = L->length; j >= i; j--) { |
|
L->data[j] = L->data[j - 1]; // 将第i个位置及之后的元素后移 |
|
} |
|
L->data[i - 1] = e; // 插入新元素 |
|
L->length++; // 线性表长度加1 |
|
return 1; |
|
} |
|
|
|
// 删除元素 |
|
int ListDelete(SeqList *L, int i) { |
|
if (i < 1 || i > L->length) { |
|
return 0; // 删除位置不合法 |
|
} |
|
for (int j = i; j < L->length; j++) { |
|
L->data[j - 1] = L->data[j]; // 将第i个位置之后的元素前移 |
|
} |
|
L->length--; // 线性表长度减1 |
|
return 1; |
|
} |
|
|
|
// 获取元素 |
|
int GetElem(SeqList L, int i, int *e) { |
|
if (i < 1 || i > L.length) { |
|
return 0; // 获取位置不合法 |
|
} |
|
*e = L.data[i - 1]; // 获取元素值 |
|
return 1; |
|
} |
|
|
|
// 打印线性表 |
|
void PrintList(SeqList L) { |
|
for (int i = 0; i < L.length; i++) { |
|
printf("%d ", L.data[i]); |
|
} |
|
printf("\n"); |
|
} |
|
|
|
int main() { |
|
SeqList L; |
|
InitList(&L); // 初始化线性表 |
|
|
|
ListInsert(&L, 1, 10); // 在第1个位置插入元素10 |
|
ListInsert(&L, 2, 20); // 在第2个位置插入元素20 |
|
ListInsert(&L, 3, 30); // 在第3个位置插入元素30 |
|
|
|
PrintList(L); // 打印线性表:10 20 30 |
|
|
|
int e; |
|
GetElem(L, 2, &e); // 获取第2个位置的元素,值为20 |
|
printf("Element at position 2: %d\n", e); |
|
|
|
ListDelete(&L, 2); // 删除第2个位置的元素 |
|
PrintList(L); // 打印线性表:10 30 |
|
|
|
return 0; |
|
} |
这个程序中定义了一个SeqList结构体来表示线性表的顺序存储结构,包含了一个整数数组data和一个表示当前长度的整数length。然后实现了初始化线性表、插入元素、删除元素、获取元素和打印线性表等基本操作。在main函数中,我们创建了一个线性表,并进行了插入、获取和删除操作,最后打印了线性表的内容。