数据结构之顺序表深度讲解

news2024/12/25 9:22:56

从这节课开始就要进入数据结构的课了,小伙伴们,你们准备好了吗?系好安全带,我们要发了。

顺序表的引入

概念

相互存在一种或多种特定关系的数据元素的集合

大白话:一个结构体包含了一些数据元素

概念不重要,大家这么理解一下就行,有兴趣可以自行搜索一些关于数据结构的专业解释

那么我们先来讲一下顺序表的里会有的数据元素

struct SQList 这是一个结构体,相信大家都可以理解。什么?你说你不理解结构体?没事,那我给大家简单的回顾一下结构体

结构体的简单回顾

结构体的基本框架:

struct   结构体的名字

 {

 }(结构体的缩名);//注意这里是有分号的哦

结构体的元素定义:

和我们一开始学的变量定义是一样的。

eg.   int size;

那么也许会有人问我们现在所创建的数组是int类型,但如果不是int类型,岂不是得一个一个修改?

当然了,我们的前辈早已想到了这个问题所以创建了另一个思路:

这个思路很简单,具体的模板我放在下面了,建议大家收藏一下。

模板:typedef    类型/结构体的缩名   新定义的名字;

思路讲解:我们使用定义变量的方法,运用自定义类型的typedef给想要包含的类型或结构体的缩名起一个新的名字,之后每当需要使用该类型或者结构体的缩名时直接替换,当需要修改时,也只需要修改这一行的代码。

顺序表的底层   

顺序表的底层是数组,因此我们需要用我们上面所写的自定义类型的新名字以指针的方式去定义一个数,并且还要记录有效的元素个数以及空间大小。

本篇文章的主要内容

温馨提示:图片中的代码所在文件是顺序表的头文件。

顺序表的创建

初始化时,需要将数组设为空,并且有效个数和所用空间均为0。

有创建就有销毁,那么我们先来看销毁

顺序表的销毁

当我们的程序走到销毁时,一定是有多余的空间是被占用的,所以当程序进入到这个函数时应当先释放数组arr所占用的多余空间,并且要将数组恢复为空。当然啦有效个数和空间也要恢复为0。

顺序表的尾插

这里我们先讲思路

首先我们先看第二种情况,这是我们容易想到的

紧接着,我们来看第一种情况

总结一下上面的两种情况:

当空间不够时,我们需要先申请增加空间容量,再插入数据,当空间足够时直接插入数据即可。

于是代码如下

函数——检查空间是否充足

当我们的程序进行到检查空间是否充足时,进入该函数,先判断空间是否已被占用完,如果还要剩余的空间,则跳出这个函数,进行插入语句。如果已被占用完,那么就会进入下一个判断,也就是空间是否为0,如果为0,则给出一定的空间,如果不为0,则成倍增加空间。

温馨提醒:malloc calloc 是申请空间,realloc是增加空间容量。

顺序表的头插

首先声明一下顺序表不为空,因为顺序表为空时,无法进行头插,之后通过遍历数组将元素进行头插。


顺序表的尾删

尾删比较简单,我们只需要确保顺序表不为空以及有效数字的个数不为空即可。


顺序表的头删

在确保顺序表不为空以及有效数字的个数不为空的情况下,我们通过循环,将整体的数往前移一个单位,注意:移完数字后千万别忘记将有效数字的个数减一!!!

指定位置添加数字

在确保顺序表不为空以及指定位置不为空的情况下,先检查空间,检查完空间后,通过循环,将元素从pos开始到结尾的元素统一往后移一个单位。空出位置后进行插入,并且size的个数要+1。

指定位置删除数字

在确保顺序表不为空以及指定位置不为空的情况下,通过循环,将从pos开始到末尾的元素统一往前移一个单位,记得将size的个数减一哦。

输出顺序表

顺序表的输出和数组的输出没什么区别,所以我不多讲了。

另外我在和大家分享一下我在写顺序表时遇到的问题

解决方案就是将x64改成x86,即可解决该问题了

测试文件的代码

最后做一下总结:

本篇文章需要学会的内容有:typedef    类型/结构体的缩名   新定义的名字;以及typedef   struct    结构体名{

}结构体缩名;

需要巩固的内容有指针、循环,以及部分函数的使用。


以上就是本篇文章的内容,本篇文章的内容对于初学数据结构的同学来说会比较难,但是熟能生巧,相信不久的将来你也可以成功的

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

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

相关文章

代码随想录算法训练营第五天:哈希表的初步认识[1]

代码随想录算法训练营第五天:哈希表的初步认识 数组就是简单的哈希表,但是数组的大小可不是无限开辟的 前言 我们已经学习了数组、字符串、链表等数据结构,但是大家有没有发现,如果我们想要找到其中某个元素或者节点&#xff0…

pytho爬取南京房源成交价信息并导入到excel

# encoding: utf-8 # File_name: import requests from bs4 import BeautifulSoup import xlrd #导入xlrd库 import pandas as pd import openpyxl# 定义函数来获取南京最新的二手房房子成交价 def get_nanjing_latest_second_hand_prices():cookies {select_city: 320100,li…

【MySQL 数据宝典】【索引原理】- 001 索引原理分析 (AVL树、B-Tree、B+Tree)

一、索引定义 MySQL官方对索引定义:是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。 索引是物理数据页存储,在数据文件中(InnoDB,ibd文件),利用数据页(page)存储。 索引可以…

Java数据结构堆

堆的概念 所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中。 小根堆:根节点的大小小于孩子节点。整棵树都是小根堆必须满足每颗子树都是小根堆。 堆的存储方式 从堆的概念可知,堆是一棵完全二叉树,因此可以层序的规则采用顺序的…

Java虚拟机(JVM)之字节码文件

让我们先来简单了解一下JVM。 JVM功能: 1、解释和运行:对字节码文件中的指令,实时的解释成机器码让计算机执行。 2、内存管理:自动为对象、方法等分配内存;自动的垃圾回收机制,回收不再使用的对象。 3、即…

树莓派4B安装安卓系统LineageOS 21(Android14)

1:系统下载 2:下载好镜像后,准备写入SD卡,我这边使用的是 balenaetcher 3:插入树莓派,按照指示一步一步进行配置,可以配置时区,语言。 注意点 1》:想返回的时候按F2 2》:进入系统…

解密C语言内存分配奥秘,遨游动态内存管理海洋

一.C语言内存分区 C语言内存区从低地址到高地址分为代码区、常量区、全局(静态)区、堆区、栈区。 1.栈区 栈区介绍 栈区由编译器自动分配释放,由操作系统自动管理,无须手动管理。栈区上的内容只在函数范围内存在,当…

【软件开发规范篇】JAVA后端开发编码命名规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

阿里云服务器(Ubuntu22)上的MySQL8更改为大小写不敏感

因为windows上默认的mysql8.0是大小写不敏感的,部署到服务器上之后发现ubuntu默认的是大小写敏感,所以为了不更改代码,需要将mysql数据库设置为大小写不敏感的。 !!!重要一定要做好数据库的备份&#xff0…

docker如何关闭证书认证

目录 前言关闭Docker认证的步骤修改pom 前言 当docker认证证书过期了,项目又要马上上线怎么办?重新生成证书,时间来不及,这时最快的方法就是关闭证书认证。 关闭Docker认证的步骤 停止Docker服务 systemctl stop docker编辑Do…

【C++】对文章分词,并对词频用不同排序方法排序,比较各排序算法效率(功能全面,通俗易懂)

文章分词 1.问题描述2.需求分析3.概要设计3.1 主程序流程3.2 函数调用关系 4.主函数实现4.1 main.h4.2 main.cpp 5. 函数实现5.1 processDic函数5.2 forwardMax函数5.3 countWordFreq函数5.4 quickResult函数5.5 其它排序算法效率…

异地组网、网络部署、无线覆盖,贝锐蒲公英一步到位

面对网络架构复杂的企业总部,分散在各地的分支机构,以及出差的远程办公人员,如何才能高效异地组网? 为了确保总部、分部网络实现远程稳定、高速互访,以及远程人员安全访问总部业务系统,基于自研SD-WAN的贝…

elementui el-date-picker禁止选择今年、今天、之前、时间范围限制18个月

1、禁止选择今年之前的所有年份 <el-date-pickerv-if"tabsActive 0":clearable"false"v-model"yearValue"change"yearTimeChange"type"year"placeholder"选择年"value-format"yyyy":picker-options…

手搓数组栈(C语言)

stack.h #pragma once#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <stdbool.h> // 支持动态增长的栈 typedef int STDataType; typedef struct Stack {STDataType* a;int top; // 栈顶int capacity; // 容量 }Stack; //…

光伏储能系统的主要作用都有什么?

光伏储能系统&#xff0c;结合了光伏技术和储能技术&#xff0c;已经成为当今可再生能源领域的重要一环。它不仅在电力供应中扮演着关键角色&#xff0c;还在许多其他领域展现出其广泛的应用价值。本文将详细探讨光伏储能系统的主要作用。 首先&#xff0c;光伏储能系统在家庭住…

Java苍穹外卖03-Redis-营业状态-HttpClient-微信小程序开发-微信登录以及浏览

一、Redis入门 1.Redis简介 是对MySQL数据库的补充 2.下载安装 启动redis&#xff1a; 再开一个cmd&#xff1a;连接本地redis数据库 如果想连接其他地方的redis数据库&#xff1a;h为ip&#xff0c;p为端口 a为密码 3.数据类型 哈希适合存储对象&#xff0c;列表适合存储…

【问题实操】银河麒麟高级服务器操作系统实例,CPU软锁报错触发宕机

1.服务器环境以及配置 处理器&#xff1a; Kunpeng 920 内存&#xff1a; 256G DDR4 整机类型/架构&#xff1a; TaiShan 200 (Model 2280) 内核版本 4.19.90-23.8.v2101.ky10.aarch64 2.问题现象描述 两台搭载麒麟v10 sp1的机器均在系统CPU软锁报错时&#xff0c;触…

基于遗传优化算法的TSP问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的TSP问题求解&#xff0c;分别对四个不同的城市坐标进行路径搜索。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ....…

迅睿CMS图集多文件Files调用指南

在构建企业网站、B2B/B2C商城&#xff0c;或任何功能性质以图片展示为主的平台时&#xff0c;使用多图或图集功能变得至关重要。特别是当展示大量产品的详细视图、项目案例图片&#xff0c;或任何需要以图集形式呈现的内容时&#xff0c;多文件Files功能便发挥着无可替代的作用…