线性表

顺序表(挺简单,直接上代码)

  • InitList(&L) : 初始化顺序表
  • DestroyList(&L) : 销毁顺序表
  • ListEmpty(L) : 判断顺序表是否为空
  • ListLength(L) : 获取顺序表中当前元素的数量,即线性表长度
  • DisplayList(L) : 输出顺序表
  • GetElem(L, i, &e) : 获取顺序表的第i个元素
  • LocateElem(L, e) : 查找并返回顺序表中第一个值为e的元素的序号
  • ListInsert(&L, i, e) : 在顺序表的第i个位置插入元素e
  • ListDelete(&L, i, &e) : 删除顺序表的第i个元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdio.h>
#define maxsize 100
typedef int ElemType;

typedef struct
{
ElemType data[maxsize];
int length;
} SqList;

// InitList函数用于将顺序表初始化为空表,即将顺序表的长度设置为0
void InitList(SqList *L)
{
L->length = 0;
}

// ListEmpty函数用于判断顺序表是否为空。如果顺序表长度为0,则返回1(真),否则返回0(假)
int ListEmpty(SqList L)
{
return L.length == 0;
}

// ListLength函数用于获取顺序表中当前元素的数量
int ListLength(SqList L)
{
return L.length;
}

// ListInsert函数用于在顺序表的第i个位置插入元素e
void ListInsert(SqList *L, int i, ElemType e)
{
// 表头表尾无效插入
if (i < 1 || i > L->length + 1)
{
printf("Error: Invalid index\n");
return;
}

// 表满,无法插入
if (L->length >= maxsize)
{
printf("Error: List full\n");
return;
}

// 通过循环将从第i个位置开始的所有元素向后移动一个位置,然后将新元素e插入到第i个位置,并增加顺序表的长度
for (int j = L->length; j >= i; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
}

// 此处函数参数是SqList *L,而不是SqList L,表示函数将修改顺序表的内容
void ListDelete(SqList *L, int i)
{
// 表头表尾无效删除
if (i < 1 || i > L->length)
{
printf("Error: Invalid index\n");
return;
}

// 通过循环将从第i个位置开始的所有元素向前移动一个位置,并减少顺序表的长度
for (int j = i; j < L->length; j++)
{
L->data[j - 1] = L->data[j];
}
L->length--;
}

// 此处函数参数是SqList L,而不是SqList *L,表示函数只读访问顺序表的内容,不修改其内容
void ListPrint(SqList L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
printf("\n");
}

int main()
{
SqList L;
InitList(&L);
ListInsert(&L, 1, 10);
ListInsert(&L, 2, 20);
ListInsert(&L, 3, 30);
ListInsert(&L, 4, 40);
ListPrint(L);
ListDelete(&L, 2);
ListPrint(L);
return 0;
}