顺序表的基本操作(必学)

 

目录

线性表:

顺序表:

概念和结构:

动态顺序表常用操作实现:

头文件(数组顺序表的声明):

各种基本操作总的声明: 

顺序表的初始化:

顺序表的销毁

顺序表的打印

检查是否需要扩容

尾插

头插

头删

尾删

顺序表的查找

顺序表的插入

顺序表的删除

顺序表的问题


线性表:

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛应用的数据结构,常见的线性表:顺序表,链表,栈,队列,字符串……。

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

顺序表:

概念和结构:

顺序表是用一段物理地址连续的存储单元依次存放数据元素的线性结构,一般情况下用数组存储。 顺序表有一个特点:必须从头开始存数据

1.静态顺序表:使用定长数组存储元素

 2.动态顺序表:使用动态开辟的数组存储

动态顺序表常用操作实现:

头文件(数组顺序表的声明):


typedef int SLDateType;
typedef struct SeqList
{SLDateType* a;    int size;      //数据的个数int capacity;    //容量大小
}SeqList;

使用SLDateType代替int是因为如果需要更改数据类型,直接将int修改即可,操作方便。

各种基本操作总的声明: 

//初始化
void SeqListInit(SeqList* ps);
//销毁
void SeqListDestroy(SeqList* ps);
//打印
void SeqListPrint(SeqList* ps);
//尾插
void SeqListPushBack(SeqList* ps, SLDateType x);
//头插
void SeqListPushFront(SeqList* ps, SLDateType x);
//头删
void SeqListPopFront(SeqList* ps);
//尾删
void SeqListPopBack(SeqList* ps);
//检查是否需要扩容
void SeqListCheckCapacity(SeqList* ps);// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x);
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, int pos, SLDateType x);
// 顺序表删除pos位置的值
void SeqListErase(SeqList* ps, int pos);

顺序表的初始化:

void SeqListInit(SeqList* ps)
{assert(ps);ps->capacity = 0;ps->size = 0;ps->a = NULL;
}

顺序表的销毁

void SeqListDestroy(SeqList* ps)
{assert(ps);if (ps->a != NULL){free(ps->a);ps->a = NULL;ps->capacity = 0;ps->size = 0;}
}

顺序表的打印

void SeqListPrint(SeqList* ps)		
{assert(ps);int i = 0;for (i = 0; i < ps->size; i++){printf("%d ", ps->a[i]);}printf("\n");
}

检查是否需要扩容

void SeqListCheckCapacity(SeqList* ps)
{assert(ps);if (ps->size == ps->capacity){int NewCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;SLDateType* tmp = (SLDateType*)realloc(ps->a, sizeof(SLDateType) * NewCapacity);if (tmp == NULL){perror("realloc");return;}ps->a = tmp;ps->capacity = NewCapacity;}}

尾插

void SeqListPushBack(SeqList* ps, SLDateType x)
{assert(ps);SeqListCheckCapacity(ps);ps->a[ps->size] = x;ps->size++; 
}

头插

void SeqListPushFront(SeqList* ps, SLDateType x)
{assert(ps);SeqListCheckCapacity(ps);int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps->size++;
}

头删

void SeqListPopFront(SeqList* ps)
{assert(ps->size > 0);int begin = 1;while (begin<ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}

尾删

void SeqListPopBack(SeqList* ps)
{assert(ps->size > 0);ps->size--;
}

顺序表的查找

int SeqListFind(SeqList* ps, SLDateType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->a[i] == x){return i;}}return -1;
}

顺序表的插入

// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, int pos, SLDateType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);SeqListCheckCapacity(ps);int end = ps->size - 1;while (end>=pos){ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;}

顺序表的删除

// 顺序表删除pos位置的值
void SeqListErase(SeqList* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}

顺序表的问题

  1. 中间/头部的插入删除,时间复杂度为O(N)。
  2. 增容需要申请空间,拷贝数据,释放旧空间,会有不小消耗。
  3. 增容一般是2倍增长,必然会有一定的空间浪费。

因为以上这些问题,又有另一种表,叫链表。详情请关注下一篇文章。

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

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

相关文章

3分钟了解安全数据交换系统有什么用!

企业为了保护核心数据安全&#xff0c;都会采取一些措施&#xff0c;比如做网络隔离划分&#xff0c;分成了不同的安全级别网络&#xff0c;或者安全域&#xff0c;接下来就是需要建设跨网络、跨安全域的安全数据交换系统&#xff0c;将安全保障与数据交换功能有机整合在一起&a…

Wordpress对接Lsky Pro 兰空图床插件

Wordpress对接Lsky Pro 兰空图床插件 wordpress不想存储图片到本地&#xff0c;访问慢&#xff0c;wordpress图片没有cdn想要使用图床&#xff0c;支持兰空自定义接口 安装教程—在wp后台选择插件zip—然后启用—设置自己图床API接口就ok了&#xff0c;文件全部解密&#xff0c…

css的继承属性

继承属性&#xff1a; &#xff08;1&#xff09;说明 当一个元素的继承属性没有指定值的时候&#xff0c;就会使用父元素的属性的计算值。 css的计算值&#xff1a;在继承过程中从父级传输到子级的值。根据指定值计算。 处理特殊值 inherit、initial、revert、revert-layer …

实习知识整理9: 点击直接购买按钮后,跳转到确认订单页面

1. 为按钮绑定事件 <button id"addCartButton">加入购物车</button><br/> $("#buyButton").click(function () {if ( ! loginUser) {// 如何将商品信息传递到后台&#xff0c;后台能够将内容在新的订单页面显示$("#buyItemForm&quo…

[SWPUCTF 2021 新生赛]hardrce

[SWPUCTF 2021 新生赛]hardrce wp 参考博客&#xff1a;https://www.cnblogs.com/bkofyZ/p/17644820.html 代码审计 题目的代码如下&#xff1a; <?php header("Content-Type:text/html;charsetutf-8"); error_reporting(0); highlight_file(__FILE__); if(is…

第41节: Vue3 watch函数

在UniApp中使用Vue3框架时&#xff0c;你可以使用watch函数来观察和响应Vue实例上的数据变化。以下是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用watch函数&#xff1a; <template> <view> <input v-model"message" type"text…

数据结构之<堆>的介绍

1.简介 堆是一种特殊的数据结构&#xff0c;通常用于实现优先队列。堆是一个可以被看作近似完全二叉树的结构&#xff0c;并且具有一些特殊的性质&#xff0c;根据这些性质&#xff0c;堆被分为最大堆&#xff08;或者大根堆&#xff0c;大顶堆&#xff09;和最小堆两种。 2.…

H266/VVC帧间预测编码技术概述

帧间预测编码简述 帧间预测利用视频时间域的相关性&#xff0c;使用邻近已编码图像像素值预测当前图像的像素值&#xff0c;能有效去除视频时域冗余。 目前主要的视频编码标准中&#xff0c;帧间预测都采用基于块的运动补偿技术&#xff0c;不同的编码标准有不同的分块方式。 …

爆款前端设计工具揭晓!提高工作效率的5款神器,助你事半功倍!

前端设计工具以更低的成本提供更快的移动开发&#xff0c;他们帮助前端开发人员有效地创建响应设计&#xff0c;但找到一个实用的前端设计工具并不容易&#xff0c;在这里&#xff0c;即时设计师为您组织了五个免费和易于使用的前端页面工具&#xff0c;来选择一个&#xff01;…

使用Visual Studio调试VisionPro脚本

使用Visual Studio调试VisionPro脚本 方法一 &#xff1a; 修改项目文件 csproj步骤&#xff1a; 方法二 &#xff1a; Visual Studio附加功能步骤&#xff1a; 方法一 &#xff1a; 修改项目文件 csproj 步骤&#xff1a; 开启VisionPro脚本调试功能 创建一个VisionPro程序…

我的2023——致敬过去的360天(抢先版)

岁末伊始&#xff0c;2023年马上结束了&#xff0c;突然发现该是年检复盘的时候了。 “一个男孩要经历多少困苦才能成为一个男人”。在前半年工作中&#xff0c;我正在逐渐从技术“大头兵”向部门牵头人进行转变&#xff0c;在这之前是佳诚在默默帮我做着这些工作&#xff0c;…

如何快速删除pdf周围的空白

问题&#xff1a;写论文往往需要pdf格式的图片&#xff0c;但pdf往往四周存在大量空白需要手动截图很麻烦 解决&#xff1a; 打开命令行输入&#xff1a;pdfcrop 图片名.pdf

kotlin遍历list

方法一 for in val list1: List<String> listOf("A", "B", "C", "D", "E")for (i in list1) {Log.d("*******log", i)} 方法二&#xff1a;使用until val list1: List<String> listOf("A&q…

理解io/nio/netty

一、io io即input/output&#xff0c;输入和输出 1.1 分类 输入流、输出流&#xff08;按数据流向&#xff09; 字节流&#xff08;InputStream/OutputStream&#xff08;细分File/Buffered&#xff09;&#xff09;、字符流(Reader/Writer&#xff08;细分File/Buffered/pu…

智能优化算法应用:基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.卷积优化算法4.实验参数设定5.算法结果6.…

[AIGC] ArrayList介绍

在Java编程中&#xff0c;我们经常需要存储和处理一组数据。为了更方便地管理数据集合&#xff0c;Java提供了许多集合类。其中之一就是ArrayList。 文章目录 是什么为什么怎么用总结 是什么 ArrayList是Java中的一个动态数组类&#xff0c;它实现了List接口。它可以自动调整大…

完美解决org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

已解决org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 下滑查看解决方法 文章目录 报错问题解决思路解决方法交流 报错问题 org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_…

LINUX自启动线程学习笔记

由于嵌入式处理器的性能不够&#xff0c;希望尽量能减少不必要的启动进程。对处理器启动进程进行了学习&#xff0c;了解哪些相关介绍判断哪些必须保留的线程。 当前我使用的LINUX 系统启动后的线程 # ps PID USER COMMAND1 root init //启动部分的和GRUB相关2 ro…

Duboo-入门到学废【上篇】

目录 1&#x1f95e;.什么是duboo 2&#x1f32d;.架构图 3.&#x1f37f;快速入门 4.&#x1f9c7;浅浅理解 1.什么是duboo&#x1f936;&#x1f936;&#x1f936; Dubbo是一个由阿里巴巴开发的基于Java的开源RPC框架。它提供了高性能、透明化的远程方法调用&#xff0…

JWT 单点登录探析:原理、用途与安全实践

JWT 单点登录探析&#xff1a;原理、用途与安全实践 什么是 JWT&#xff1f; JWT &#xff08;JSON Web Token&#xff09; 是目前最流行的跨域认证解决方案&#xff0c;是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出&#xff0c;JWT 本身也是 Token&#xff0c…