下面是C语言顺序表的基本操作的完整攻略:
1. 初始化操作
- 初始化操作是顺序表的第一步,用于创建一个空的顺序表。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储数据元素
int length; // 记录顺序表的当前长度
} SqList; // 顺序表的类型定义
// 初始化顺序表
void InitList(SqList *L) {
for (int i = 0; i < MAXSIZE; i++) {
L->data[i] = 0; // 所有数据元素初始化为0
}
L->length = 0; // 当前长度为0
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
printf("%d\n", L.length); // 打印顺序表的长度,结果应该为0
return 0;
}
2. 插入操作
- 插入操作是指在顺序表中指定位置插入一个数据元素。
// 在指定位置插入元素
int ListInsert(SqList *L, int pos, int elem) {
if (pos < 1 || pos > L->length + 1 || L->length == MAXSIZE) {
// 如果插入位置超出范围或者顺序表已满,则返回0表示插入失败
return 0;
}
// 如果插入位置在顺序表中间,则需要将pos及其后面的元素向后移动一个位置
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i-1];
}
L->data[pos-1] = elem; // 在pos位置插入elem
L->length++; // 顺序表长度加1
return 1; // 插入成功
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
ListInsert(&L, 1, 1); // 在第1个位置插入1
ListInsert(&L, 2, 2); // 在第2个位置插入2
ListInsert(&L, 1, 3); // 在第1个位置插入3
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]); // 打印L中的所有元素,结果应该为3 1 2
}
return 0;
}
3. 删除操作
- 删除操作是指删除顺序表中指定位置的数据元素。
// 删除指定位置的元素
int ListDelete(SqList *L, int pos) {
if (pos < 1 || pos > L->length) {
// 如果删除位置超出范围,则返回0表示删除失败
return 0;
}
// 如果删除位置在顺序表中间,则需要将pos后面的元素向前移动一个位置
for (int i = pos; i < L->length; i++) {
L->data[i-1] = L->data[i];
}
L->length--; // 顺序表的长度减1
return 1; // 删除成功
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
for (int i = 1; i < 6; i++) {
ListInsert(&L, i, i); // 在顺序表的前5个位置依次插入1~5
}
ListDelete(&L, 3); // 删除第3个位置的元素
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]); // 打印L中的所有元素,结果应该为1 2 4 5
}
return 0;
}
4. 查询操作
- 查询操作是指在顺序表中查找指定值的数据元素。
// 查找指定值的元素,并返回它在顺序表中的位置
int LocateElem(SqList *L, int elem) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == elem) {
return i+1; // 返回该元素在顺序表中的位置
}
}
return -1; // 如果没找到,则返回-1表示失败
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
for (int i = 1; i < 6; i++) {
ListInsert(&L, i, i); // 在顺序表的前5个位置依次插入1~5
}
int pos = LocateElem(&L, 3); // 在顺序表中查找值为3的元素
printf("%d\n", pos); // 打印3的位置,结果应该为3
return 0;
}
5. 扩容操作
- 扩容操作是指当顺序表已经满了,需要动态扩大顺序表的存储空间。
// 扩容操作,将顺序表的存储空间扩大一倍
void ExpandList(SqList *L) {
int *temp = (int *)realloc(L->data, MAXSIZE*2); // 重新分配存储空间
L->data = temp;
MAXSIZE *= 2;
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
for (int i = 1; i < 11; i++) {
ListInsert(&L, i, i); // 在顺序表的前10个位置依次插入1~10
}
ExpandList(&L); // 扩大顺序表的空间为原来的2倍
ListInsert(&L, 11, 11); // 在第11个位置插入11
printf("%d\n", L.data[10]); // 打印第11个元素,结果应该为11
return 0;
}
6. 打印操作
- 打印操作是指将顺序表中的所有数据元素依次打印出来。
// 打印顺序表
void PrintList(SqList *L) {
for (int i = 0; i < L->length; i++) {
printf("%d ", L->data[i]); // 输出每个元素
}
printf("\n"); // 输出换行符
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
for (int i = 1; i < 6; i++) {
ListInsert(&L, i, i); // 在顺序表的前5个位置依次插入1~5
}
PrintList(&L); // 打印顺序表中的所有元素
return 0;
}
7. 清空操作
- 清空操作是指将顺序表中的所有数据元素清空。
// 清空顺序表
void ClearList(SqList *L) {
for (int i = 0; i < MAXSIZE; i++) {
L->data[i] = 0; // 所有数据元素初始化为0
}
L->length = 0; // 顺序表长度归零
}
- 示例说明:
int main() {
SqList L; // 声明一个顺序表
InitList(&L); // 初始化顺序表
for (int i = 1; i < 6; i++) {
ListInsert(&L, i, i); // 在顺序表的前5个位置依次插入1~5
}
ClearList(&L); // 清空顺序表
printf("%d\n", L.length); // 打印顺序表长度,结果应该为0
return 0;
}
以上就是C语言顺序表的基本操作的完整攻略,包括了初始化、插入、删除、查询、扩容、打印、清空等操作,可以帮助读者更好地理解和掌握顺序表的使用方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等) - Python技术站