数据结构与算法学习笔记一---顺序表的静态存储表示和实现(C语言)

目录

1.顺序表的静态存储过程

1.初始化

2.销毁

3.清空

4.表长

 5.获取数据元素

 6.直接前驱

7.直接后继

 8.插入

9.删除  

10.遍历

11.测试代码


前言

        这篇博客主要是顺序表的静态分配存储表示。

1.顺序表的静态存储过程

        我们使用静态数据来存储顺序表中的数据元素,静态顺序表定义如下:

//----- 线性表的静态分配顺序存储结构 - - - - -
#define MaxSize 100
typedef int ElementType;
typedef int Status;typedef struct {ElementType data[MaxSize]; // 存储空间基址int length;            // 当前长度
}StaticSqList;

1.初始化

        表长设置为0.

//初始化
Status initStaticSqList(StaticSqList *sqList){sqList->length = 0;return 1;
}

2.销毁

        静态顺序表不需要销毁。

3.清空

// 清空表
void clearSqList(StaticSqList * sqList){sqList->length = 0;
}

4.表长

int staticSqListLength(StaticSqList * sqList){return sqList->length;
}

 5.获取数据元素

Status getElementForStaticSqList(StaticSqList *sqList,int pos,ElementType * element){if (pos < 1 || pos > sqList->length) {return 0;}*element =  sqList->data[pos-1];return 1;
}

        数据类型(data type)是一个值的集合和定义在这个集合上的一组操作的总称。

 6.直接前驱

// 获取直接前驱 获取element的前一个数据元素priorElement
Status priorStaticSqListElement(StaticSqList * sqList,ElementType element,ElementType * priorElement){for (int i = 0; i<sqList->length; i++) {if (sqList->data[i] == element) {//找到数据元素if (i>=1) {* priorElement = sqList->data[i-1];return 1;}}}return 0;
}

7.直接后继

// 获取直接后继 获取element的后一个数据元素nextElement
Status nextStaticSqListElement(StaticSqList * sqList,ElementType element,ElementType * nextElement){for (int i = 0; i<sqList->length; i++) {if (sqList->data[i] == element) {//找到数据元素if (i+1 <= sqList->length-1) {* nextElement = sqList->data[i + 1];return 1;}}}return 0;
}

 8.插入

Status insertStaticSqList(StaticSqList * sqList,int pos,ElementType element){if (pos < 1 || pos > sqList->length + 1 || sqList->length == MaxSize) {return 0;}for (int i = sqList->length; i > pos - 1; i--) {sqList->data[i] = sqList->data[i-1];}sqList->data[pos -1] = element;sqList->length++;return 1;
}

9.删除  

Status deleteSqList(StaticSqList *sqList,int pos,ElementType * element){if (pos < 1 || pos > sqList->length) {return 0;}for (int i = pos - 1; i < sqList->length - 1; i++) {sqList->data[i] = sqList->data[i+1];}* element = sqList->data[pos -1];sqList->length--;return 1;
}

10.遍历

// 遍历顺序表
void travseStaticSqList(StaticSqList *sqList){for (int i = 0; i<sqList->length; i++) {printf("%d\t",sqList->data[i]);}printf("\n");
}

11.测试代码

//初始化
Status initStaticSqList(StaticSqList *sqList){sqList->length = 0;return 1;
}
// 清空表
void clearSqList(StaticSqList * sqList){sqList->length = 0;
}
// 判断链表是否为空
Status staticSqListEmpty(StaticSqList *sqList){return sqList->length == 0;
}
int staticSqListLength(StaticSqList * sqList){return sqList->length;
}
Status getElementForStaticSqList(StaticSqList *sqList,int pos,ElementType * element){if (pos < 1 || pos > sqList->length) {return 0;}*element =  sqList->data[pos-1];return 1;
}
// 获取直接前驱 获取element的前一个数据元素priorElement
Status priorStaticSqListElement(StaticSqList * sqList,ElementType element,ElementType * priorElement){for (int i = 0; i<sqList->length; i++) {if (sqList->data[i] == element) {//找到数据元素if (i>=1) {* priorElement = sqList->data[i-1];return 1;}}}return 0;
}
// 获取直接后继 获取element的后一个数据元素nextElement
Status nextStaticSqListElement(StaticSqList * sqList,ElementType element,ElementType * nextElement){for (int i = 0; i<sqList->length; i++) {if (sqList->data[i] == element) {//找到数据元素if (i+1 <= sqList->length-1) {* nextElement = sqList->data[i + 1];return 1;}}}return 0;
}
Status insertStaticSqList(StaticSqList * sqList,int pos,ElementType element){if (pos < 1 || pos > sqList->length + 1 || sqList->length == MaxSize) {return 0;}for (int i = sqList->length; i > pos - 1; i--) {sqList->data[i] = sqList->data[i-1];}sqList->data[pos -1] = element;sqList->length++;return 1;
}
Status deleteSqList(StaticSqList *sqList,int pos,ElementType * element){if (pos < 1 || pos > sqList->length) {return 0;}for (int i = pos - 1; i < sqList->length - 1; i++) {sqList->data[i] = sqList->data[i+1];}* element = sqList->data[pos -1];sqList->length--;return 1;
}
Status appendElement(StaticSqList * sqList,ElementType element){if (sqList->length  == MaxSize) {//数组已满return 0;}sqList->data[sqList->length++] = element;return 1;
}
// 遍历顺序表
void travseStaticSqList(StaticSqList *sqList){for (int i = 0; i<sqList->length; i++) {printf("%d\t",sqList->data[i]);}printf("\n");
}
void commonPrint(const char * string){printf("**********\t%s测试\t**********\n",string);
}
//测试顺序表的方法
void testStaticSqList(void){StaticSqList sqList;commonPrint("顺序表的静态存储表示");if (initStaticSqList(&sqList)) {printf("顺序表初始化成功\n");}commonPrint("判断顺序表的是否为空");if (staticSqListEmpty(&sqList)) {printf("顺序表为空,顺序的长度:%d\n",staticSqListLength(&sqList));}commonPrint("顺序表中的插入测试");for (int i = 1; i<= 10; i++) {if (appendElement(&sqList, i)) {
//            printf("数据元素%d初始化成功\n",i+1);} else {
//            printf("插入失败\n");}}printf("插入之前的数组:\n");travseStaticSqList(&sqList);printf("顺序的长度:%d\n",staticSqListLength(&sqList));if (insertStaticSqList(&sqList,5,11)) {//非法位置printf("数据元素插入成功\n");} else {printf("插入失败\n");}printf("插入之后的数组:\n");travseStaticSqList(&sqList);printf("顺序的长度:%d\n",staticSqListLength(&sqList));commonPrint("顺序表中的删除测试");int deleteElement;if (deleteSqList(&sqList,11,&deleteElement)) {//删除printf("数据元素%d删除成功\n",deleteElement);} else {printf("删除失败\n");}printf("删除之后的顺序表:\n");travseStaticSqList(&sqList);commonPrint("获取顺序表中的数据元素");for (int i = 0; i<= 11; i++) {ElementType element;if (getElementForStaticSqList(&sqList, i, &element)) {printf("数据元素获取成功,第%d个数据元素为:%d\n",i,element);}else{printf("第%d个数据元素获取失败\n",i);}}commonPrint("获取顺序表中某个数据元素的直接前驱");ElementType priorElem;if (priorStaticSqListElement(&sqList, 2, &priorElem)) {printf("数据元素直接前驱获取成功,前驱数据元素为:%d\n",priorElem);}else{printf("数据元素直接前驱获取失败\n");}commonPrint("获取顺序表中某个数据元素的直接后继");ElementType nextElem;if (nextStaticSqListElement(&sqList, 8, &nextElem)) {printf("数据元素直接后继获取成功,后继数据元素为:%d\n",nextElem);}else{printf("数据元素直接后继获取失败\n");}commonPrint("顺序表中的数据元素测试");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

粒子群算法(Particle Swarm Optimization)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;的灵感来源于鸟群或鱼群的觅食行为。想象一下&a…

Shell脚本——批量清理Kubernetes集群中Evicted状态的pod

测试环境有一台宿主机出现了异常&#xff0c;大量的异常日志导致宿主机的磁盘使用率超过了85%&#xff0c;触发了上面的pod驱离策略&#xff0c;该宿主机上的的pod处于Evicted状态。在清理了磁盘之后&#xff0c;得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…

Teachable Machine:Google开发可在浏览器运行免编程机器学习工具

项目说明 Teachable Machine 是由 Google 开发的一款基于机器学习的在线工具&#xff0c;为用户提供了创建个性化机器学习模型的简便途径&#xff0c;无需深入专业领域或编程技能。 允许用户快速、简单地创建自己的机器学习模型&#xff0c;主要用于进行图像、声音和姿势等数据…

鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下)

本篇为快锁下篇&#xff0c;说清楚快锁在内核态的实现&#xff0c;解答以下问题&#xff0c;它们在上篇的末尾被提出来。 鸿蒙内核进程池默认上限是64个&#xff0c;除去两个内核进程外&#xff0c;剩下的都归属用户进程&#xff0c;理论上用户进程可以创建很多快锁&#xff0…

【Unity从零开始学习制作手机游戏】第01节:控制3D胶囊体运动

1. 新建Project L01 使用3D Mobile模板。 2. 建立一个平面&#xff0c;用来承载物体 3. 导入Unity库内的胶囊体 下载 StandardAssets https://download.unitychina.cn/download_unity/e80cc3114ac1/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-5.6.7f1.exe …

RobbitMQ基本消息队列的消息接收

1.先给工程引入依赖 父工程有了子工程就不用导了 <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置yml…

未来相遇过去:博物馆藏品管理平台的科技革新之旅

引言&#xff1a; 尊重历史&#xff0c;意味着保护其实体的载体。在博物馆这个时间的容器中&#xff0c;每一件藏品都承载着人类文明的印记&#xff0c;它们是历史的低语&#xff0c;是过去对现在的细语。在这篇文章中&#xff0c;我将带您走进博物馆的幕后&#xff0c;探究藏品…

软件工程中的版本控制有何重要性?

版本控制在软件工程中具有非常重要的作用&#xff0c;它不仅能够帮助开发者管理代码的历史版本&#xff0c;还能够促进团队协作和降低开发风险。以下是版本控制的一些关键重要性&#xff0c;以及如何在使用LabVIEW进行项目开发中应用版本控制&#xff1a; 历史记录保持&#xf…

/proc/modules文件

/proc/modules文件中列出了内核加载的所有模块的信息&#xff0c;与使用lsmod命令类似。 第一列&#xff1a;模块名称 第二列&#xff1a;模块使用的内存大小&#xff0c;单位是bytes 第三列&#xff1a;模块被load的次数 第四列&#xff1a;是否有其他模块依赖此模块&#…

Windows:管理用户账户,密码策略和安全配置

在Windows操作系统中&#xff0c;管理用户账户和密码策略是确保系统安全的关键步骤。本文将探讨如何通过PowerShell和其他Windows工具管理用户账户&#xff0c;包括查看和设置密码策略、检查用户状态&#xff0c;以及导出和导入安全策略。这些管理任务对于系统管理员尤其重要&a…

电口和光口

在网络配置工作中&#xff0c;总会有人问什么是电口和光口&#xff0c;下面对其进行简单的区分。 1、电口 电口是服务器和网络中对RJ45等各种双绞线接口的统称&#xff0c;其原因是这些端口都使用电作为信息的承载介 质&#xff0c;不过有时它也会包含同轴电缆端口。 2、光口…

Spring框架核心:揭秘Java厨房的智能烹饪艺术

前情回顾&#xff1a;Spring框架深度解析&#xff1a;打造你的Java应用梦工厂 六. 实现控制反转 6.1 描述如何在Spring中实现IoC 在Spring Town的厨房里&#xff0c;实现控制反转就像是将食材的采购和准备过程外包给了一个智能系统。这个系统知道每种食材的特性&#xff0c;也…

C++|内存管理(2)

目录 malloc/free和new/delete的区别 共同点 不同点 内存泄漏 什么是内存泄漏 内存泄漏的危害 内存泄漏分类 堆内存泄漏 系统资源泄漏 malloc/free和new/delete的区别 共同点 都是从堆上申请空间&#xff0c;并且需要用户手动释放。 不同点 1. malloc和free是函数&a…

Php swoole和mqtt

在 PHP 中使用 Swoole 处理 MQTT 订阅消息是一种高效的方式&#xff0c;可以充分利用 Swoole 协程的非阻塞特性和高性能 I/O 处理能力。下面是一个示例代码&#xff0c;演示了如何使用 Swoole 的 MQTT 客户端来订阅消息&#xff0c;并加以详细说明。 1. 安装 Swoole 首先&…

Kubernetes——两万字超细致集群搭建平台规划

目录 前言——常见的K8S安装部署方式 一、Kubernetes平台规划 1.单Master集群架构 2.多Master集群架构 二、集群规划 1.服务器硬件配置推荐 2.操作系统初始化 2.1关闭防火墙 2.2关闭SElinux 2.3关闭Swap 2.4添加Hosts 2.5调整内核参数 2.5同步时间 三、集群搭建…

为什么有的人炫富会倒霉健康的关系是保持适当的距离

目录 为什么有的人炫富会倒霉 健康的关系是保持适当的距离 为什么有的人炫富会倒霉 有的人的八字结构就是先天的“危险体质”,俗称惹祸精,你靠近他,跟他产生关系,就会他被连累,尤其是近距离关系,比如丈夫,妻子,闺蜜这些人,当一个人八字中婚姻宫或者夫妻星不太好的时…

AtCoder Beginner Contest 353(A~E)

文章目录 A Buildings1.基本思路&#xff1a;2.代码&#xff1a; B - AtCoder Amusement Park1.基本思路&#xff1a;2.代码&#xff1a; C - Sigma Problem1.基本思路&#xff1a;2.代码&#xff1a; D - Another Sigma Problem1.基本思路&#xff1a;2.代码&#xff1a; E - …

QT ERROR: Unknown module(s) in QT: xlsx怎么办

现象描述 QT编译c代码的时候&#xff0c;报这种QT ERROR: Unknown module(s) in QT: xlsx&#xff0c;应该如何解决&#xff1f; 这里&#xff0c;我简单记录一下自己的解决问题过程。有可能&#xff0c;对遇到同样的问题的你&#xff0c;也有所帮助 第一步 检查perl是否安装…

浅析扩散模型与图像生成【应用篇】(二十四)——Text2Live

24. Text2LIVE : Text-Driven Layered Image and Video Editing 本文提出一种文本驱动的图像和视频编辑方法。与其他方法直接对图像进行编辑的方式不同&#xff0c;本文提出的方法并不是基于扩散模型的&#xff0c;更像是一个自编码器&#xff0c;通过对原图编码解码输出一个新…

华为OD机试 - 掌握的单词个数 - 回溯(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述 有一个字符…