当前位置: 首页 > news >正文

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;
}

http://www.mrgr.cn/news/58783.html

相关文章:

  • IntelliJ IDEA 2024社区版保姆及图文安装教程
  • springmvc-springsecurity-redhat keycloak SAML2 xml实现
  • # KIMI 探索版:让AI帮你解决复杂问题,小白也能轻松上手
  • react18中的jsx 底层渲染机制相关原理
  • MMScan数据集:首个最大的多模态3D场景数据集,包含层次化的语言标注.
  • 学习--四元数介绍
  • 「C/C++」C/C++之 #define 宏定义
  • CSDN等级详解:原力等级、创作等级、博客等级及期升级、降级与评分要点
  • C#与C++交互开发系列(十一):委托和函数指针传递
  • 使用 xlrd 和 xlwt 库进行 Excel 文件操作
  • 【多Agent协作论文解读】采用STORM模式更好利用LLM撰写长文章,基于Dify复现
  • ECharts饼图-基础饼图,附视频讲解与代码下载
  • 解决Docker部署ocserv的时候,遇到客户端经常重连问题
  • 纯血鸿蒙的最难时刻才开始
  • 设计一个支持断点续传的文件上传和下载系统
  • 1189.Pell数列
  • 020:无人机重要知识点名词解释
  • 【Java基础面试题】
  • C#自动化生成控件的时候坐标点的基本概念错误导致的异常
  • Java最全面试题->数据库/中间件->Redis面试题
  • Data Modeling
  • simple framebuffer显示去光标闪烁
  • C++ (六) 输入输出和文件操作:C++的魔法书卷
  • 【74LS138+74LS48组成模拟拔河+数码管显示】2022-5-29
  • SQLI LABS | Less-10 GET-Blind-Time based-double quotes
  • DOSBox汇编编译准备工作及初步编译