顺序表的创建

本期我们主要讨论动态顺序表

这个内容可以分为三个部分

1.创建头文件进行函数声明

2.创建源文件进行函数定义

3.创建主文件进行测试

我们先来看看头文件里的函数声明:


函数声明:

头文件中包括<stdlib.h>库函数用于进行动态内存管理,assert用于警告退出。

SLDataType为顺序表中存储的元素类型,typedef int,即将int类型取个名字叫做SLDataType。与宏相反,例如define int SLDataType为将int转为SLDataType,而typedef是将SLDataType转为int。

SeqList为我们创建的顺序表,三个参数分别为

1.存储的元素指针类型(即首地址),相当于创建这种元素类型的数组,后面我们可以通过动态内存为这个地址开始分配空间。

2.现在在数组中存放的元素个数。

3.数组的空间容量,即可以存储多少个这种类型的元素。

接下来几个函数用途分别为初始化,销毁,输出,扩容,尾插,尾删除,头插,头删除操作。

函数定义:

函数定义的源文件中我们要包含声明的头文件,之后在开始对函数进行定义。

初始化函数:

传入顺序表的地址。

#注意:必须传入地址,传入的如果是顺序表本身的话只是对原顺序表的一份拷贝,无法队员顺序表进行修改。

将顺序表的数组地址设置为空。

将顺序表的元素个数设置为0。

将顺序表的空间大小设置为0.

销毁函数:

因为是动态顺序表,使用的空间是向操作系统借的,所以用完之后需要释放。

如果数组首地址不为空,则释放数组。

之后:

将顺序表的数组地址设置为空。

将顺序表的元素个数设置为0。

将顺序表的空间大小设置为0.

这一步其实可以直接用初始化函数完成。

输出函数:

按照正常的方式输出数组即可。

空间分配函数(重点):

如果已存放的元素个数等于数组可存放元素个数,则需要再分配空间。

此时有两种可能:

1.如果数组本身没有空间,则需要给他一个空间。

2.如果数组本身有空间,只需要将数组空间翻倍即可。

我们使用newcapacity来记录新空间的大小,并创建一个指针来记录开辟空间的首地址。

如果成功开辟空间,则将新空间传给顺序表,顺序表的数组地址改为新空间的地址,可存放元素个数改为newcapacity。

如果没有成功开辟,则产生警告,退出程序。

尾插函数:

先使用空间分配函数确保顺序表具有充足的空间,然后将顺序表数组的最后一位改为插入的值,粗放的元素个数size++。

头插函数:

第一步还是要检查数组空间是否足够。

找到顺序表数组最后一个位置

从size位置开始(数组元素最后一位为size-1,在头部插入新的值也就是所有元素后移一位)。

每一位都修改为前一位直到i=0时退出,i此时为第一位,即:将第一位修改为新插入的数x,然后将

存放的元素个数+1即可。

尾删函数:

将最后一位的值修改为-1然后存放的元素个数-1即可。

头删函数:

元素个数减去一,从第一位开始每一位都修改为后一位即可。

插入函数:

这个函数比头插尾插更高级,找到固定位置插入一个数即可。

我这里是pos为第几位,在那一位放上插入数。

查找函数:

用途为找到某个固定的数第一次出现的下标,没出现则返回-1.

汇总:

在我们创建的源文件中包含上我们刚刚定义函数的文件,然后进行运行,设计的符合预想,结束。

#看在博主这么辛苦写文章写代码的份上留个免费的赞吧,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt + VS2017 创建一个简单的图片加载应用程序

简介&#xff1a; 本文介绍了如何使用Qt创建一个简单的图片加载应用程序。该应用程序可以打开图片文件并在界面上显示选定的图片&#xff0c;并保存用户上次选择的图片路径。 1. 创建项目&#xff1a; 首先&#xff0c;在VS中创建一个新的Qt Widgets应用程序项目&#xff0c;并…

亚信安慧AntDB:激荡数据浪潮,塑造智能新纪元

亚信安慧AntDB一直秉承着“技术生态”的理念&#xff0c;不断进行技术创新和功能增强&#xff0c;以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统&#xff0c;AntDB在技术上始终保持敏锐的洞察力&#xff0c;不断汲取国内外先进技术的精华&a…

Acwing.1371 货币系统(完全背包问题)

题目 给定 V种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V种货币凑出 N元钱&#xff0c;请问共有多少种不同的凑法。 输入格式 第一行包含两个整数 V…

C#常见Winform窗体效果

目录 1&#xff0c;窗体闪烁。 2&#xff0c;透明非矩形的窗体。 3&#xff0c;窗口显示&#xff0c;退出呈现平滑效果。 4&#xff0c;窗体不在任务栏中显示&#xff1a; 1&#xff0c;窗体闪烁。 /// <summary>/// 窗体闪烁/// </summary>/// <param na…

提质增效|大型汽车制造业运维精细化管理建设实战

项目背景 某大型汽车制造企业随着数字化技术的深入应用&#xff0c;对运维在“质量与效率”方面的精细化管理有了更高的要求。借助云智慧运维指标体系实现了 IT 架构的智能化与可视化&#xff0c;高效解决系统显性问题&#xff0c;积极处理系统隐性问题&#xff0c;提升系统稳…

AttributeError: ‘TestBrowser‘ object has no attribute ‘driver‘

求助大佬&#xff01;&#xff01; 求助大佬&#xff01;&#xff01; 求助大佬&#xff01;&#xff01; AttributeError: TestBrowser object has no attribute driver 代码&#xff1a; test_browser.py from time import sleepfrom appium import webdriverclass Test…

【xinference】(8):在autodl上,使用xinference部署qwen1.5大模型,速度特别快,同时还支持函数调用,测试成功!

1&#xff0c;关于xinference Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理&#xff0c;并创建强大的 AI 应用。 Xor…

ChatGPT常用提示词,各行各业如何使用ChatGPT

常规交互提示词&#xff1a; 定义与解释&#xff1a; 请解释XXX术语的含义。阐述一下YYY的概念。 问答模式&#xff1a; 谁是发明了WWW的人&#xff1f;请告诉我太阳系内最大的行星是哪个&#xff1f; 创作类任务&#xff1a; 为我写一首诗&#xff0c;主题是春天的早晨。创作一…

手搓Docker-Image-Creator(DIC)工具(04):DIC的代码实现

此系列的前 3 篇主要是介绍了 Docker 的应用、Docker 编排文件 Dockerfile 的常用命令、以及 Docker 镜像的构建过程等都进行简单介绍。尤其在第 3 篇&#xff0c;讲述了 Docker 运行时、安装用等资源&#xff0c;并在文末提出了存在的不足和改进的方向&#xff0c;本篇就直接从…

安卓Android 架构模式及UI布局设计

文章目录 一、Android UI 简介1.1 在手机UI设计中&#xff0c;坚持的原则是什么1.2 安卓中的架构模式1.2.1 MVC (Model-View-Controller)设计模式优缺点 1.2.2 MVP(Model-View-Presenter)设计模式MVP与MVC关系&#xff1a; 1.2.3 MVVM(Model—View—ViewModel ) 设计模式1.2.4 …

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…

【MySQL】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

FastAPI Web框架教程 第6章 表单和上传文件

6-1 什么是Form表单 需求场景 很多网站都支持上传文件&#xff0c;比如说&#xff1a;注册时上传头像&#xff1b;填写问卷时上传附件等等。 那么FastAPI是如何来解决文件上传的需求呢&#xff1f; 其实&#xff0c;这个需求不是FastAPI要解决的问题&#xff0c;这是很常见…

阿赵UE学习笔记——23、动画蒙太奇

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用方法。上一篇介绍了动画合成功能&#xff0c;这次介绍的动画蒙太奇&#xff0c;和动画合成有很多类似的东西&#xff0c;但本质上却又不同。   蒙太奇是法语“剪接”的意思。所以动画蒙太奇&…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

STM32 M3内核寄存器概念

内容主要来自<<M3内核权威指南>> 汇编程序中的最低有效位&#xff08;Least Significant Bit&#xff09;。LSB是二进制数中最右边的位&#xff0c;它代表了数值中的最小单位。在汇编程序中&#xff0c;LSB通常用于表示数据的最小精度或者作为标志位。 ---------…

element-ui 修改el-form-item样式

文章目录 form结构修改el-form-item所有样式只修改label只修改content只修改input只修改button form结构 <el-form :model"formData" label-width"80px"> <el-form-item label"label1"> <el-input v-model"formData.valu…

新手如何用Postman做接口自动化测试

1、什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来&#xff0c;本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已…

二叉树 - 栈 - 计数 - leetcode 331. 验证二叉树的前序序列化 | 中等难度

题目 - 点击直达 leetcode 331. 验证二叉树的前序序列化 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理方法1&#xff1a;栈方法2&#xff1a;计数 3. 时间复杂度 3. 代码实现方法1&#xff1a;栈方法2&#xff1a;计数 leetcode 331. 验证二…

免费Linux系统和生信宝典原创学习教程

免费Linux系统和生信宝典原创学习教程 生物信息的学习离不开Linux系统&#xff0c;不管自己写命令处理数据&#xff0c;还是使用现有的工具。Linux对我们来讲最重要的是它强大的命令行功能&#xff0c;可以快速、批量、灵活的处理数据的提取、统计和整理等耗时耗力的重复性工作…