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

 

目录

线性表:

顺序表:

概念和结构:

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

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

各种基本操作总的声明: 

顺序表的初始化:

顺序表的销毁

顺序表的打印

检查是否需要扩容

尾插

头插

头删

尾删

顺序表的查找

顺序表的插入

顺序表的删除

顺序表的问题


线性表:

线性表是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.hqwc.cn/news/300707.html

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

相关文章

【中小型企业网络实战案例 二】配置网络互连互通

​【中小型企业网络实战案例 一】规划、需求和基本配置-CSDN博客 热门IT技术视频教程&#xff1a;https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 配置接入层交换机 1.以接入交换机ACC1为例&#xff0c;创建ACC1的业务VLAN 10和20。 <…

因吹斯汀!只需上传照片,GPT-4V精准识别食物的卡路里和摄入热量

健身和减肥的朋友有福啦&#xff01; 最近一篇文章探索了GPT-4V在膳食评估领域的强大能力&#xff0c;可以根据饮食图片精准判断食物的种类与重量&#xff0c;并给出营养成分的分析&#xff0c;包括碳水化合物、蛋白质、脂肪占比。 最最重要的是&#xff0c;它还能告诉我们这…

c语言的初始学习(练习)

##初学c语言---MOOC浙江大学翁恺先生学习c语言 那么我们先看看这个题目吧&#xff0c;这是初始语法的应用。 记住&#xff0c;我们的程序是按步骤执行的&#xff0c;并不是在不同的两行同时进行。 程序设计&#xff1a;1.了解题目的需要&#xff0c;几个变量需要用到&#x…

App应用如何在应用市场获得更多下载量?

App的转化率至关重要&#xff0c;App如何获得更多用户&#xff0c;提高应用的下载量&#xff1f; 据 Apple 称&#xff0c;每周有 6.5亿访问者访问应用商店&#xff0c;77%的应用下载来自 iOS 应用商店的自然搜索。随着 Apple 默认关闭了IDFA&#xff0c;自然搜索比以往任何时…

众和策略:12月新批国产网游版号数量过百

上星期五&#xff08;22日&#xff09;&#xff0c;A股冲高回落&#xff0c;三大股指挨近午盘拉升走高&#xff0c;午后再度回落走低&#xff0c;沪指尾盘跌幅收窄。到收盘&#xff0c;沪指跌0.13%报2914.78点&#xff0c;深成指跌0.39%报9221.31点&#xff0c;创业板指跌0.37%…

怎么判断台灯是否护眼?分享适合考研使用的护眼台灯

虽然台灯是家家户户都会有的一盏照明设备&#xff0c;但是很多人并不是了解自家台灯是好是坏&#xff0c;能不能护眼等等。其实台灯是非常有讲究的&#xff0c;如果长期使用一些不合格、劣质的台灯&#xff0c;会让我们在不知不觉中造成视力损伤&#xff0c;从而导致近视。 也…

【软考中级】网络工程师:8.网络安全

本章考察内容比较广泛&#xff0c;考题对知识点都会有所涉及。 8.1 网络安全的基本概念 8.1.1 网络安全威胁的类型 窃听 这种情况发生在广播式网络系统中&#xff0c;每个节点都可以读取数据&#xff0c;实现搭线窃听、安装通信监视器和读取网上的信息等。 假冒 当一个实体…

AIGC重塑教育:AI大模型驱动的教育变革与实践

目录 引言 AI与教育工作者 ​教育资源不平衡 引言 AI正迅猛地改变着我们的生活。 根据高盛发布的一份报告&#xff0c;AI有可能取代3亿个全职工作岗位&#xff0c;影响全球18%的工作岗位。在欧美&#xff0c;或许四分之一的工作可以用AI完成。另一份Statista的报告预测&…

百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

阶段十-java新特性

JDK9新特性 1.模块化系统 jar包结构的变化 jar -》model -》package -》class 通过不同的模块进行开发 每个模块都有自己的模块配置文件module-info.java 2.JShell JDK9自带的命令行开发&#xff0c;在进行简单的代码调试时可以直接编译使用 可以定义变量&#xff0c;方法&…

LeetCode刷题--- 优美的排列

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.cs…

【计算机网络】—— 奈氏准则和香农定理

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 失真 - 信号的变化 ​编辑影像失真的因素&#xff1a; ​编辑信道带宽&#xff1a; 码间串扰…