c语言练习题82:顺序表的使用

news2024/9/23 19:24:21

顺序表的使用

1、顺序表的概念及结构

线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...

线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

顺序表和数组的区别

◦ 顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝

• 顺序表分类

◦ 静态顺序表 概念:使⽤定⻓数组存储元素

◦ 动态顺序表

2、动态顺序表的实现

 

Seqlist.c 

#define  _CRT_SECURE_NO_WARNINGS 
#include"SeqList.h"
void SLInit(SL* ps) {
	ps->a = NULL;
	ps->capacity = ps->size = 0;//也可在初始化时开辟空间
}
void SLDestory(SL* ps) {
	if (ps->a) {
		free(ps->a);
	}
	ps->a = NULL;
	ps->capacity = ps->size = 0;
}
void SLCheckCapacity(SL* ps) {
	//空间足够直接尾插
	//空间不够则进行扩容
	if (ps->size == ps->capacity) {
		//空间不够则进行扩容(relloc申请失败返回空指针)
		int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SLDataType* tmp = (SLDataType*)realloc(ps->a, newCapacity * 2 * sizeof(SLDataType));
		if (tmp == NULL) {
			perror("relloc fail\n");
			return 1;
		}
		ps->a = tmp;
		ps->capacity = newCapacity;
	}
}
void SLPushBack(SL* ps, SLDataType x){
	assert(ps != NULL);
	
	//空间足够直接尾插
	//空间不够则进行扩容(relloc申请失败返回空指针)
	SLCheckCapacity(ps);
		//直接插入数据
		ps->a[ps->size] = x;//ps->a[ps->size++] = x;
		ps->size++;
}
void SLPushFront(SL* ps, SLDataType x) {
	assert(ps);
	//判断空间是否足够不够则扩容
	SLCheckCapacity(ps);
	for (size_t i = ps->size; i > 0; i--) {
		ps->a[i] = ps->a[i - 1];
	}
	ps->a[0] = x;
	ps->size++;
}
void SLPopBack(SL* ps) {
	assert(ps);
	assert(!SLIsEmpty(ps));//assert(ps->size)也可以
	//ps->a[ps->size - 1] = 0;//(可有可无)
	ps->size--;//size最初为0,为0则不能减减
}
void SLPopFront(SL* ps, SLDataType x) {

}
void SLPrint(SL* ps) {
	for (size_t i = 0; i < ps->size; i++) {
		printf("%d ", ps->a[i]);
	}
	printf("\n");
}
bool SLIsEmpty(SL* ps) {
	assert(ps);
	return ps->size == 0;//当前数据表有效数据位0,则当前数据表为空
}

test.c

#define  _CRT_SECURE_NO_WARNINGS 
#include"SeqList.h"
void SLtest() {
	SL sl;
	SLInit(&sl);
	//尾部插入
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	SLPrint(&sl);
	//头部插入
	SLPushFront(&sl, 5);
	SLPushFront(&sl, 6);
	SLPushFront(&sl, 7);
	SLPrint(&sl);
	SLPopBack(&sl);
	SLPrint(&sl);
	SLPopBack(&sl);
	SLPrint(&sl);
    SLDestory(&sl);
}
int main() {
	SLtest();
	return 0;
}

Seqlist.h

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int SLDataType;
typedef struct SeqList
{
	SLDataType* a;
	SLDataType size;//顺序表中有效的数据格式
	SLDataType capacity;//顺序表当前的空间大小
}SL;
//typedef struct SeqList SL(即为)
//对顺序表进行初始化
void SLInit(SL* ps);
//对顺序表进行销毁
void SLDestory(SL* ps);
//尾部插入
void SLPushBack(SL* ps, SLDataType x);
//头部插入
void SLPushFront(SL* ps, SLDataType x);
//尾部删除
void SLPopBack(SL* ps);
//头部删除
void SLPopFront(SL* ps);
//打印
void SLPrint(SL* ps);
//判断顺序表是否位空
bool SLIsEmpty(SL* ps);

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

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

相关文章

基于工业5G网关的工业机器人监测控制方案

随着智能制造、自动化生产的发展进步&#xff0c;工业机器人的身影越来越多地出现在工厂现场&#xff0c;成为新型无人化、智能化生产制造的中坚力量。 工业机器人的运行伴生着海量的数据采集、传输、分析和反馈执行&#xff0c;因此也需要高速、低延迟的5G网络&#xff0c;支撑…

Oracle 云服务即将支持 PostgreSQL!

2023 年 9 月 19 日&#xff0c;Oracle 产品团队发布了一篇文章&#xff0c;宣布 Oracle 云基础架构&#xff08;OCI&#xff09;开始提供 PostgreSQL 服务。目前支持的版本为 PostgreSQL 14.9&#xff0c;提供有限支持&#xff0c;12 月份将会提供正式版本。 众所周知&#x…

网络原理之TCP_IP

目录 应用层重点协议 传输层重点协议 1.UDP协议 (一)UDP协议段格式 (二)UDP的特点 无连接 不可靠传输 面向数据报 全双工 缓冲区 大小受限 (三)基于UDP的应用层协议 (四)面试题 2.TCP协议 (一)TCP协议段格式 (二)TCP的特点 有连接 可靠传输 面向字节流 缓冲…

竞赛选题 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

Vue数据代理的原理

一、Object.defineProperty方法 我们可以使用一个Object.defineProperty方法给一个对象添加属性&#xff0c;并对该属性进行权限设置 语法格式如下&#xff1a; Object.defineProperty(对象 , "属性名" , { // 配置项 }) let Person {name:"寻霖",age:1…

HTTP协议的请求协议和响应协议的组成,HTTP常见的状态信息

HTTP协议 什么是协议 协议实际上是某些人或组织提前制定好的一套规范,大家只要都按照这个规范来就可以做到沟通无障碍 HTTP协议是W3C(万维网联盟组织)制定的一种超文本传输通信协议(发送消息的模板和数据的格式),除了传送字符串,还有声音、视频、图片等流媒体等超文本信息 …

单目3D目标检测——SMOKE 模型推理 | 可视化结果

本文分享SMOKE的模型推理&#xff0c;和可视化结果。以kitti数据集为例子&#xff0c;对训练完的模型进行推理&#xff0c;并可视化3D框的结果&#xff0c;画到图像中。 关于模型原理、搭建开发环境、模型训练&#xff0c;可以参考之前的博客&#xff1a; 【论文解读】SMOKE …

【分享】Word文档“只读方式”的两种模式

如果想要防止Word文档的内容被意外更改&#xff0c;可以设置成以“只读方式”打开&#xff0c;这样就算更改了也不用担心不小心保存了文档。 Word文档“只读方式”有两种模式&#xff0c;下面我们来看看这两种模式具体是如何设置的。 模式一&#xff1a;无密码的“只读方式” …

基于YOLOv5、YOLOv8的火灾检测(超实用项目)

目录 1.简介 2.YOLO算法 3.基于YOLOv5、YOLOv8的火灾检测 视频已上传b站 YOLOv5/YOLOv8的火灾检测&#xff08;超实用项目&#xff09;_哔哩哔哩_bilibili 本文为系列专栏&#xff0c;包括各种YOLO检测算法项目、追踪算法项目、双目视觉、深度结构光相机测距测速三维测量项…

基于黏菌优化的BP神经网络(分类应用) - 附代码

基于黏菌优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于黏菌优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.黏菌优化BP神经网络3.1 BP神经网络参数设置3.2 黏菌算法应用 4.测试结果&#xff1a;5.M…

教你如何『SSH』远程连接『内网』服务器

前言 最近博主实验室要搬家&#xff0c;因为服务器只有连接内网才能使用&#xff0c;所以搬走之后就无法在公网连接使用服务器&#xff0c;确实是让人非常苦恼&#xff0c;所以本文将会主要讲解如何使用公网服务器 SSH 连接内网服务器 系统配置 内网服务器&#xff1a;Ubuntu …

【配置vscode编写Java代码和输出在外部控制台】

配置vscode编写Java代码和输出在外部控制台 打开vscode&#xff0c;扩展中搜索java安装如下插件&#xff0c; 安装完成后&#xff0c;打开一个文件夹&#xff0c;新建hello.java文件&#xff0c;粘贴下面代码 public class hello {public static void main(String[] args) {S…

【Python】win安装

目录标题 下载目录安装步骤验证是否安装成功linux 、MacOs 安装 下载目录 https://www.python.org/downloads/ 安装步骤 验证是否安装成功 进入命令行&#xff0c;输入 &#xff1a; python 出现版本号即查看成功&#xff1a; linux 、MacOs 安装 Python 安装到 Linux 上…

小黑子—MyBatis:第三章

MyBatis入门3.0 七 小黑子使用javassist生成类7.1 Javassist的使用7.2 javassist生成动态类并实现接口7.3 工具类GenerateDaoProxy的编写7.3.1 每一个方法体的动态拼接7.3.2 MyBatis的getMapper方法 八 MyBatis中接口代理机制及使用8.1 面向接口的方式进行CRUD8.1.1 步骤18.1.2…

idea将jar包deploy到本地仓库

1、pom.xml文件引入配置&#xff0c;如下参考&#xff1a; <distributionManagement><snapshotRepository><id>maven-snapshots</id><url>http://nexus1.coralglobal.cn/repository/maven-snapshots/</url></snapshotRepository><…

2023全网最火的接口自动化框架对比 (建议收藏)

一、前言 自动化测试是把将手工驱动的测试行为转化为机器自动执行&#xff0c;通常操作是在某一框架下进行代码编写&#xff0c;实现用例自动发现与执行&#xff0c;托管在 CI/CD 平台上&#xff0c;通过条件触发或手工触发&#xff0c;进行回归测试&线上监控&#xff0c;…

四川竹哲电子商务有限公司抖音培训的靠谱选择

在今天的数字时代&#xff0c;抖音已经成为企业和个人必备的营销工具。然而&#xff0c;如何充分利用抖音的潜力&#xff0c;实现最大的营销效果&#xff0c;却让许多人感到困惑。四川竹哲电子商务有限公司正是为了解决这一问题而存在的。作为一家专业的抖音培训公司&#xff0…

Windows 7或10 - 删除进程方法,解决端口占用问题 - taskkill 命令删除进程

目录 一、正常删除进程Windows 命令 —— netstat&#xff1a; 二、taskkill 命令删除进程参考链接 一、正常删除进程 Windows 命令 —— netstat&#xff1a; 查看 8080 端口占用的进程 PID 号 netstat -ano|findstr "8080"类似如下&#xff1a;&#xff08;笔者…

溯源图构建工具SPADE的使用历程

溯源图构建工具SPADE的使用历程 一、我的环境二、SPADE下载安装过程1.下载SPADE2.编译SPADE3.安装SPADE4.启动SPADE 三、遇到的问题 一、我的环境 虚拟机&#xff1a;Virtual Box 6.1 OS&#xff1a;Kali 二、SPADE下载安装过程 SPADE网址&#xff1a;https://github.com/as…

MyBatisPlus属性自动填充和乐观锁插件+查询删除操作

属性字段自动填充 一、实体类和数据表添加两个字段&#xff08;属性&#xff09; 表&#xff1a;create_tiem/update_time 实体类&#xff1a;createTime/updateTime 二、实体类中属性进行注解添加 TableField(fillFieldFill.INSERT) private Date createTime;TableField(f…