06 顺序表的基本操作
顺序表的基本操作
一、顺序表的初始化
对于使用静态数组实现的顺序表来说,由于数组已经定义完成,而对于顺序表的操作基本上都依赖于其长度,所以只需要在初始化时将长度赋0即可。
// 初始化函数
void init_list(SLQ_LIST *L)
{L->length = 0;
}
定义顺序表后调用该函数进行初始化
// 定义顺序表
SQL_LIST list;// 对顺序表进行初始化
init_list(&list);
也可以定义顺序表时,直接初始化
// 定义顺序表时直接初始化
SQL_LIST list = {0};
扩展:动态分配内存方式
// 初始化函数
int init_list(SQL_LIST *L)
{// 动态内存L->data = (ElementType*)malloc(sizeof(ElementType) * MAX_SIZA);// 内存分配失败if (L->data == NULL){return 0;}L->length = 0;return 1;
}
二、获取顺序表的长度
获取长度和判断为空与线性表的实现方式无关,不会因为是静态数组或者动态分配,也不会因为是基本类型数据元素或者结构体类型元素而有不同,可以直接给出其函数实现:
// 获取顺序表长度
int get_length(SQL_LIST *L)
{return L->length;
}// 判断顺序表是否为空
int is_empty(SQL_LIST *L)
{return L->length = 0;
}
三、顺序表的遍历
顺序表的遍历操作,就是对于数组基本的循环输出,需要注意循环的终止条件是和顺序表的长度而非数组长度有关:
// 顺序表的遍历
void show(SQL_LIST *L)
{for (int i = 0; i <= L->length; i++){// 如果数组元素不是基本类型,可修改输出类型printf("%d", L->data[i]);// 输出前,加一个逗号if ( i < L->length - 1 ){printf(",");}// 最后一个元素,用回车符号else{printF("\n");}}
}
四、获取顺序表的数据元素
获取线性表中数据元素的操作比较常用,在顺序表中由于使用数组进行存储,因此按照位置获取数据元素非常的方便,其函数实现如下
// 获取顺序表中的第i个元素
int get(SQL_LIST *L, int i, ElementType *e)
{// 判读插入的元素位置是否存在if ( i < 1 || i > L->length ){return 0;}// 将第i个元素,下标对应的i-1,赋值给指针e所指向的变量*e = L->data[ i - 1 ];// 成功,返回1return 1;
}
五、完整代码
#include <stdio.h>#define MAX_SIZA 100
typedef int ElementType;
typedef struct _sql_list {ElementType data[MAX_SIZA];int length;
} SQL_LIST; // 初始化函数
void init_list(SQL_LIST *L) {L->length = 0;
} // 获取表长度
int get_length(SQL_LIST *L) {return L->length;
}// 判断是否为空表
int is_empty(SQL_LIST *L) {return L->length == 0;
}// 遍历顺序表
void show(SQL_LIST *L) {int i;for (i = 0; i < L->length; i++) {printf("%d", L->data[i]);if (i < L->length-1) {printf(", ");}else {printf("\n");}}
}// 获取第i个元素
int get(SQL_LIST *L, int i, ElementType* e) {if (i < 1 || i > L->length) {return 0;}*e = L->data[i - 1];return 1;
}int main() {
// SQL_LIST list;
// init_list(&list);SQL_LIST list = {{1, 2, 3, 4, 5}, {5}};int len = get_length(&list);printf("表长度为:%d \n", len);int empty = is_empty(&list);if (empty) {printf("是空表 \n"); }else {printf("不是空表 \n");}show(&list);ElementType elem;int rlt = get(&list, 3, &elem);if (rlt) {printf("获取到的元素为:%d \n", elem);}else {printf("获取元素失败了 \n"); }return 0;
}