iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++超详细分析顺序表
  • 950
分享到

C++超详细分析顺序表

2024-04-02 19:04:59 950人浏览 安东尼
摘要

本次我们解剖顺序表将从以下三个结构: 1、静态顺序表和动态顺序表 2、顺序表实现增删查改等常见接口 3、顺序表相关OJ题练习 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存

本次我们解剖顺序表将从以下三个结构:

1、静态顺序表和动态顺序表

2、顺序表实现增删查改等常见接口

3、顺序表相关OJ题练习

什么是顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储。在数组上完成数据的增删查改。

兄弟们兄弟们,记得抠字眼啊,顺序表一定是连续的存储单元,并且是依次存储数据的!!!!

顺序表一般可以分为:

⛳ 静态顺序表      ? 动态顺序表

静态顺序表:使用定长数组存储,简单来说大小是固定的,数据个数也是固定的!

动态顺序表:使用动态开辟的数组存储,简单来说,装满了会自动扩大容量!

静态顺序表的实现我们就不讲了,冬天到了春天还会远吗?会了动态你还不会静态吗?所以我们今天主要讲动态顺序表!静态顺序表搭建代码如下:


// 顺序表的静态存储
#define N 100
typedef int SLDataType;
typedef struct SeqList
{
    SLDataType array[N]; // 定长数组
    size_t size;     // 有效数据的个数 
}SeqList;

动态顺序表

? 来到今天的重点!动态顺序表!

首先先来搭建顺序表的结构。

? 上面就是我给大家画的基本一个结构图了,下面我们来实现顺序表的基本接口:

? 首先我们顺序表需要初始化:

 ? 既然我们没有在初始化给定大小,我们现在要判断需不需要给动态表顺序表增容:

 ? 我们来实现动态顺序表头部插入数据:

 ? 接着来实现尾部插入数据:

 ? 我们要开始实现头部删除数据了:

? 下面实现尾部删除数据:

 ? 接着我们来实现在pos下标位置插入数据:

 ? 我们再来实现删除pos下标位置的数据:

⛅ 查找顺序表中的元素x:

 ? 修改指定pos下标的数据

在实际中在我上面写的函数有些都可以复用哦!这个就等着你们去发现吧,我们接着往下走:

其实还有一些顺序表的打印,清空,求元素个数,这些相信你们看完上面的内容对于你们来说非常容易!我就不一一举例了,下面进入我们的习题时间!(●'◡'●)

题目1:给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

输入:nums = [0,1,2,2,3,0,4,2], val = 2

输出:5, nums = [0,1,4,0,3]

解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

题目来源:27. 移除元素 - 力扣(LeetCode) (leetcode-cn.com)

思路1:遍历数组,发现元素为val就把后面的往前挪覆盖掉val,但是这样的时间复杂度为O(N²),这样当数组全是val,效率就会特别低!

思路2:以空间换时间,开辟一个新数组,把不是val的数放到新数组,再把新数组的值拷贝回来!但是这样的话空间复杂度O(N)不符合题意!

思路3:使用双指针,空间复杂度O(1),时间复杂度O(n),代码如下:


int removeElement(int* nums, int numsSize, int val)
{
	int src = 0;
	int dst = 0;
	while (src < numsSize)
	{
		if (nums[src] != val)
		{
			nums[dst++] = nums[src++];
		}
		else
		{
			++src;
		}
	}
	return dst;
}

题目2:给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3

输出:[1,2,2,3,5,6]

解释:需要合并 [1,2,3] 和 [2,5,6] 。

合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

题目来源:88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com)

 那这道题的思路就留给小伙伴们自己去思考了,我就直接给你们上代码!


void merge(int* nums1, int m, int* nums2, int n)
{
	int end1 = m - 1;
	int end2 = n - 1;
	int end = m + n - 1;
	while (end1 >= 0 && end2 >= 0)
	{
		if (nums1[end1] > nums2[end2])
		{
			nums1[end] = nums1[end1];
			--end;
			--end1;
		}
		else
		{
			nums1[end] = nums2[end2];
			--end;
			--end2;
		}
	}
	//如果是end2结束,不需要处理因为就是在nums1里面
	while (end2 >= 0)
	{
		nums1[end] = nums2[end2];
		--end;
		--end2;
	}
}

好了,通过这篇文章的学习,相信你会把顺序表理解的更透彻,还是那句话,我们一起快乐编程不头秃!加油奥里给!???

??????完结撒花!??????

gitee(码云):Mercury. (zzwlwp) - Gitee.com

到此这篇关于C++超详细分析顺序表的文章就介绍到这了,更多相关C++ 顺序表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++超详细分析顺序表

本文链接: https://www.lsjlt.com/news/143761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++超详细分析顺序表
    本次我们解剖顺序表将从以下三个结构: 1、静态顺序表和动态顺序表 2、顺序表实现增删查改等常见接口 3、顺序表相关OJ题练习 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存...
    99+
    2022-11-13
  • C++ 数据结构超详细讲解顺序表
    目录前言一、顺序表是什么概念及结构二、顺序表的实现顺序表的缺点几道练手题总结(●’◡’●) 前言 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种...
    99+
    2022-11-13
  • C语言线性表中顺序表超详细理解
    目录一、本章重点二、线性表三、顺序表四、静态顺序表接口实现4.1顺序表初始化4.2顺序表打印4.3顺序表尾插4.4顺序表尾删4.5顺序表头插4.6顺序表头删4.7顺序表任意位置插入4...
    99+
    2022-11-13
  • C++primer超详细讲解顺序容器
    目录顺序容器概述容器库概览迭代器容器定义和初始化赋值和swap顺序容器操作向顺序容器添加元素访问元素删除元素特殊的forwa_list单向链表操作改变容器大小vector对象是如何增...
    99+
    2022-11-13
  • C语言超详细讲解顺序表的各种操作
    目录顺序表是什么顺序表的结构体顺序表的接口函数顺序表相关操作的菜单顺序表的初始化添加元素陈列元素往最后加元素往前面加元素任意位置加元素删除最后元素删除前面元素 删除任意元素...
    99+
    2022-11-13
  • 新手向超详细的C语言实现动态顺序表
    目录一、各个函数接口的实现 1.1 不太好‘'李姐‘'的“容量检测函数” 1.2 在任意位置插入的函数"坑!" 1.3 在任意位置删除数据的函数 1.4 其余简单的接口函数 二、顺序...
    99+
    2022-11-12
  • C++超详细分析红黑树
    目录红黑树红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入操作情况一情况二情况三红黑树的验证用红黑树封装map、set红黑树的迭代器封装map封装set红黑树 红黑树的概念 红黑...
    99+
    2022-11-13
  • Java超详细讲解ArrayList与顺序表的用法
    目录简要介绍Arraylist容器类的使用Arraylist容器类的构造ArrayList的常见方法ArrayList的遍历ArrayList中的扩容机制简要介绍 顺序表是一段物理地...
    99+
    2022-11-13
  • C#中顺序表的示例分析
    这篇文章主要为大家展示了“C#中顺序表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中顺序表的示例分析”这篇文章吧。首先来看看看C#数据结构与算法之顺序表的概念:C#数据结构与算法...
    99+
    2023-06-18
  • C++超详细分析优化排序算法之堆排序
    堆排序,学习了整整一天才把这个排序彻底搞明白…… 首先第一点,堆排序是直接选择排序的一种优化排序算法。由于直接排序算法的遍历次数过多,导致直接排序算法的时...
    99+
    2023-02-09
    C++堆排序 C++优化排序
  • C语言 超详细顺序表的模拟实现实例建议收藏
    目录概念及结构接口实现1 顺序表的动态存储2 顺序表初始化3 顺序表的销毁4 顺序表的尾插5 顺序表的尾删6 顺序表的头插7 顺序表的头删8 顺序表容量的检查与扩容9 顺序表任意位置...
    99+
    2022-11-13
  • Java超详细分析讲解哈希表
    目录哈希表概念哈希函数的构造平均数取中法折叠法保留余数法哈希冲突问题以及解决方法开放地址法再哈希函数法公共溢出区法链式地址法哈希表的填充因子代码实现哈希函数添加数据删除数据判断哈希表...
    99+
    2022-11-13
  • C语言代码详细描述顺序线性表
    目录代码内容包括: 代码实现如下:总结代码内容包括: 1.表的创建 2.增删改查插 3.界面跳转 代码实现如下: #include <stdio.h> #in...
    99+
    2022-11-12
  • C语言经典顺序表实例分析
    这篇“C语言经典顺序表实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言经典顺序表实例分析”文章吧。1、移除元素题...
    99+
    2023-06-30
  • C++超详细深入分析单例模式
    目录不能被拷贝的类C++98C++11只能在堆上创建对象的类只能在栈上创建对象的类不能被继承的类C++98C++11只能创建一个对象的类(单例模式)设计模式单例模式饿汉模式懒汉模式不...
    99+
    2022-11-13
  • C++超详细分析讲解内联函数
    目录宏函数(带参数的宏)的缺点inline修饰的函数就是内联函数内联函数的特点宏函数和内联函数的区别宏函数(带参数的宏)的缺点 第一个问题:宏函数看起来像一个函数调用,但是会有隐藏一...
    99+
    2022-11-13
  • C++虚函数和多态超详细分析
    目录1.什么是虚函数2.纯虚函数3.c++多态4.纯虚函数和ADT过程5.虚析构函数6.dynamic_cast类型转换7.成员函数指针 1.什么是虚函数 C++类中用virtual...
    99+
    2023-01-28
    C++虚函数和多态 C++虚函数 C++多态
  • C语言与C++内存管理超详细分析
    目录一、内存1.1 内存四区1.2 使用代码证实内存四区的底层结构二、malloc 和 free2.1 malloc 和 free 的使用2.2 内存泄漏与安全使用实例与讲解三、ne...
    99+
    2022-11-13
  • C++超详细分析单链表的实现与常见接口
    相信如果看完了上期顺序表的小伙伴应该发现了顺序表的诸多缺点: 中间/头部的插入删除,时间复杂度为O(N)! 增容需要申请新的空间,拷贝数据,释放旧空间,会有不少的消耗。 增容一...
    99+
    2022-11-13
  • C语言线性表中顺序表的示例分析
    小编给大家分享一下C语言线性表中顺序表的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、本章重点线性表和顺序表的概念动态和静态顺序表接口实现在线0j训练...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作