C语言实现的顺序表功能完整实例攻略
什么是顺序表?
顺序表是一种线性表,它通常由一组连续的存储单元(即数组)来存储数据元素,数据上的逻辑顺序可以和物理顺序一一对应,因此可以直接通过下标访问元素。它具有随机访问的特点,而不需要像链表那样依次寻找到某一个位置。
顺序表的基本操作
顺序表的基本操作包括初始化、插入、删除、查找、修改、销毁等。
实现方法
通过定义一个结构体来表示顺序表,结构体包含若干成员,比如说数组、长度等。
// 定义顺序表结构体
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE]; // 存储数据的数组
int length; // 当前顺序表的长度
} SqList;
初始化
顺序表初始化就是将结构体中的数组长度设为0,即表示当前顺序表为空。
void InitList(SqList *L) {
L->length = 0;
}
插入
在顺序表指定位置插入元素,需要将指定位置及其后面的所有元素向右移动一个位置。如果当前顺序表已满,则无法插入新元素。
bool ListInsert(SqList *L, int i, int e) {
if (L->length == MAXSIZE) { // 判断顺序表是否已满
return false;
}
if (i < 1 || i > L->length + 1) { // 判断插入位置是否有效
return false;
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1]; // 将元素向后移动一个位置
}
L->data[i - 1] = e; // 将新元素插入指定位置
L->length++; // 长度加1
return true;
}
删除
在顺序表指定位置删除元素,需要将指定位置后面的所有元素向左移动一个位置。如果当前顺序表为空,则无法删除元素。
bool ListDelete(SqList *L, int i) {
if (L->length == 0) { // 判断顺序表是否为空
return false;
}
if (i < 1 || i > L->length) { // 判断删除位置是否有效
return false;
}
for (int j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j]; // 将元素向左移动一个位置
}
L->length--; // 长度减1
return true;
}
查找
查找顺序表指定位置的元素,即通过下标来访问数组中的元素。如果当前顺序表为空或查找位置无效,则无法查找元素。
bool GetElem(SqList L, int i, int *e) {
if (L.length == 0 || i < 1 || i > L.length) { // 判断查找位置是否有效
return false;
}
*e = L.data[i - 1]; // 将指定位置的元素值赋给*e
return true;
}
修改
修改顺序表指定位置的元素,即通过下标来访问数组中的元素并修改它的值。如果当前顺序表为空或修改位置无效,则无法修改元素。
bool SetElem(SqList *L, int i, int e) {
if (L->length == 0 || i < 1 || i > L->length) { // 判断修改位置是否有效
return false;
}
L->data[i - 1] = e; // 将指定位置的元素值修改为e
return true;
}
销毁
销毁顺序表,即将结构体中的数组长度设为0,释放占用的内存空间。
void DestroyList(SqList *L) {
L->length = 0; // 将长度设为0
free(L); // 释放内存空间
}
示例说明
示例1
以下代码示例初始化了一个顺序表,并依次插入了4个元素,最后输出了顺序表中所有元素的值。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
int main() {
SqList L;
L.length = 0;
for (int i = 1; i <= 4; i++) {
ListInsert(&L, i, i);
}
for (int i = 1; i <= L.length; i++) {
printf("%d ", L.data[i - 1]);
}
printf("\n");
return 0;
}
输出结果为:
1 2 3 4
示例2
以下代码示例初始化了一个顺序表,并依次插入了4个元素,然后删除了第3个元素,最后输出了顺序表中所有元素的值。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
int main() {
SqList L;
L.length = 0;
for (int i = 1; i <= 4; i++) {
ListInsert(&L, i, i);
}
ListDelete(&L, 3);
for (int i = 1; i <= L.length; i++) {
printf("%d ", L.data[i - 1]);
}
printf("\n");
return 0;
}
输出结果为:
1 2 4
总结
本文介绍了顺序表的基本操作及实现方法,通过结构体和数组的组合表示顺序表,在函数中实现各种操作。顺序表具有随机访问的高效性,适用于元素数量较少且需要高效查找、修改的场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现的顺序表功能完整实例 - Python技术站