C/C++数据结构之顺序表函数实现以及详细解析

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题       数据结构初阶

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1.前言

2.顺序表函数的实现

2.1顺序表定义

2.2顺序表初始化

2.3检查是否需要扩容

2.4尾插

2.5头插

2.6尾删

2.7头删

2.8指定位置插入

2.9指定位置删除      

3.总结


1.前言

        数据结构是什么,数据结构就是对数据进行存储的一种方式,主要学习的就是对数据进行增删查改的一种方式,今天我们主要讲的就是线性表中的顺序表,线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。还记得我们C语言中写的通讯录吗?我们用到大就是顺序表,顺序表可以分为静态顺序表和动态顺序表,我们主要讲的就是动态顺序表。

2.顺序表函数的实现

2.1顺序表定义

typedef struct SeqList {int* data;int size;//现有长度int capacity;//总长度
};

2.2顺序表初始化

void initsl(SeqList*psl)
{psl->data = (int *)malloc(sizeof(int) * MAXSIZE);psl->capacity = MAXSIZE;psl->size = 0;
}

2.3检查是否需要扩容

void checkcapacity(SeqList *psl)
{if (psl->size == psl->capacity){int newcapacity=psl->capacity + 2;int* p = (int*)realloc(psl->data, sizeof(int) * newcapacity);	if (p == NULL){assert("realloc");return;}psl->data = p;psl->capacity = newcapacity;printf("扩容成功\n");}
}

在这里我们主要用到了函数realloc扩容。

2.4尾插

void SLPushBack(SeqList* psl,int x)
{assert(psl);checkcapacity(psl);psl->data[psl->size++] = x;
}

 我们先对指针进行判断是否为空,再检查是否需要扩容, 然后对数据进行尾插。

2.5头插

void SLPushFrount(SeqList* psl,int x)
{assert(psl);checkcapacity(psl);int end = psl->size;while (end > 0){psl->data[end] = psl->data[end - 1];end--;}psl->data[0] = x;psl->size++;
}

在这里我们先对数据进行判断是不是空指针,然后进行判断是否需要进行扩容,然后进行数据的挪动(由于是头插,需要把第一个数据的位置空出来,所以需要挪动数据)。头插和尾插我们相较一下可以看出来这俩个 尾插比较简单。

2.6尾删

void SLPopBack(SeqList* psl)
{assert(psl);psl->size--;
}

由于空间的可重复使用我们直接将现有长度进行减一就可以得到想要的操作。

2.7头删

void SLPopFrount(SeqList* psl)
{assert(psl);int frount = 0;while (frount < psl->size - 1){psl->data[frount++] = psl->data[frount + 1];}psl->size--;
}

在这里我们先对指针进行检查,然后对数据进行挪动,然后让长度减一,我们和尾删相比较可以看出来尾删更简单,我们对于头插,尾插,尾删,头删可以得出顺序表对尾部的插入和删除比较容易,对头部的插入和删除比较困难。

2.8指定位置插入

void SLInsert(SeqList* psl,int pow,int x)
{assert(psl);if (pow<0 || pow>psl->size){printf("输入位置非法\n");return;}int end = psl->size-1;while (end >= pow){psl->data[end + 1] = psl->data[end];end--;}psl->data[pow] = x;psl->size++;
}

我们先对指针进行检验,然后对指定的位置进行判断最后对数据进行移动。         

2.9指定位置删除      

void SLErase(SeqList* psl,int pow)
{assert(psl);if (pow < 0 || pow >= psl->size){printf("输入位置非法\n");return;}while (pow < psl->size-1){psl->data[pow] = psl->data[pow + 1];pow++;}psl->size--;
}

先对指针进行判断,然后对数据进行挪动即可完成删除操作。 

3.总结

        今天的内容就结束了,我们主要讲解了顺序表的动态储存方式以及它的函数操作,对于静态顺序表我们可以对照前面写过的通讯录进行学习查看,通讯录包含三个版本,每个版本都是通讯录的优化,最后希望大家可以一件三连。

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

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

相关文章

删除链表的倒数第 N 个结点

LeetCode 19. 删除链表的倒数第 N 个结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *n…

定积分的几何应用(总结非常全面!)

文章目录 1 原函数存在性和可积性1.1 函数可积的充分条件&#xff08;判定条件&#xff09;1.2 函数存在原函数的充分条件&#xff08;判定条件&#xff09;1.3 函数可积的必要条件&#xff08;性质&#xff09;1.4 变上限积分的性质 2 平面图形2.1 平面图形的面积2.1.1 直角坐…

【ES专题】ElasticSearch集群架构剖析

目录 前言阅读对象阅读导航前置知识笔记正文一、ES集群架构1.1 为什么要使用ES集群架构1.2 ES集群核心概念1.2.1 节点1.2.1.1 Master Node主节点的功能1.2.1.2 Data Node数据节点的功能1.2.1.3 Master Node主节点选举流程 1.2.2 分片1.3 搭建三节点ES集群1.3.1 ES集群搭建步骤1…

解析python爬取Ebay数据的方式

前言 Ebay是全球著名的电子商务平台之一&#xff0c;每天都有海量的商品信息涌入其中&#xff0c;在电商行业获取这些数据试试非常有价值的&#xff0c;为了更好地了解市场动态&#xff0c;掌握更多的电商行情。Python爬虫成为了必不可少的工具&#xff0c;本文将通过使用Http…

idea中配置spring boot单项目多端口启动

参照文章 https://zhuanlan.zhihu.com/p/610767685 项目配置如下 下面为 idea 2023&#xff0c;不同版本的设置有区别&#xff0c;但是没那么大&#xff0c;idea 2023默认使用新布局&#xff0c;切换为经典布局即可。 在项目根目录的.idea/workspace.xml文件里添加如下配置 &l…

高等数学教材重难点题型总结(十二)无穷级数

最后一更&#xff01;原谅博主已经开始瞎写字了&#xff0c;最近压力太大&#xff0c;以后有时间用mathPix打出来&#xff0c;看起来更舒适一些~ 高数最后一章&#xff0c;重点在于审敛法和求解幂级数的收敛半径~ 高数基础笔记全部更新完毕&#xff0c;共12*336期&#xff0c…

SpringBoot项目多环境开发

1.yml文件&#xff08;旧&#xff09; 说明&#xff1a;旧的写法。 #应用环境 spring:profiles:active: dev --- #设置环境#生产环境 spring:profiles: pro server:port: 81--- #开发环境 spirng:profiles: dev server:port: 81--- #测试环境 spring:profiles: test server:p…

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么&#xff1f; 三、static关键字修饰的对象是什么&#xff1f; 四、C 语言中的 static &#x1f34e;static的C用法 &#x1f349;static的重点概念 &#x1f350;static修饰局部变量 &#x1f4a6;static在修饰局部变量和函数的作用 &a…

基于Google Colaboratory安装Go语言编译器操作流程

文章目录 1. 什么是Google Colaboratory2. 访问Google Colaboratory3. 创建新的笔记本4.【方法①】使用apt命令安装golang5.【方法②】使用Go安装包安装golang6. 参考链接 1. 什么是Google Colaboratory Colab是一种托管的笔记本电脑服务&#xff0c;不需要安装即可使用&#x…

STL(第三课):list

STL中的list是一个双向链表&#xff0c;它可以动态地将元素插入和删除&#xff0c;提供了许多方便的操作接口。下面我们来讲解一下CSTL list的相关内容。 list的创建比较简单&#xff0c;只需要包含头文件#include<list>&#xff0c;然后使用std::list模板即可声明一个li…

使用pdf2image pdf转图片

安装poppler https://wenku.csdn.net/answer/1zxh8ckp6i from pdf2image import convert_from_path, convert_from_bytes import os# https://github.com/Belval/pdf2imageoutput_folder ./ dpi_value 600 pdf_start_page 1 # pdf显示的第一页 start_page 237 # 真实页码 p…

二叉树按二叉链表形式存储,试编写一个判别给定二叉树是否是完全二叉树的算法

完全二叉树&#xff1a;就是每层横着划过去是连起来的&#xff0c;中间不会断开 比如下面的左图就是完全二叉树 再比如下面的右图就是非完全二叉树 那我们可以采用层序遍历的方法&#xff0c;借助一个辅助队列 当辅助队列不空的时候&#xff0c;出队头元素&#xff0c;入队头…

在 CelebA 数据集上训练的 PyTorch 中的基本变分自动编码器

摩西西珀博士 一、说明 我最近发现自己需要一种方法将图像编码到潜在嵌入中&#xff0c;调整嵌入&#xff0c;然后生成新图像。有一些强大的方法可以创建嵌入或从嵌入生成。如果你想同时做到这两点&#xff0c;一种自然且相当简单的方法是使用变分自动编码器。 这样的深度网络不…

SparkSQL

1、Spark简介 2、Spark-Core核心算子 3、Spark-Core 4、SparkSQL 文章目录 一、概述1、简介2、DataFrame、DataSet3、SparkSQL特点 二、Spark SQL编程1、SparkSession新API2、DataFrame2.1 创建DataFrame2.2 SQL 语法2.3 DSL语法 3、DataSet4、RDD、DataFrame、DataSet相互转换…

强大的pdf编辑软件:Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款强大的PDF编辑和管理软件&#xff0c;它提供了广泛的功能&#xff0c;使用户能够轻松创建、编辑、转换和共享PDF文档。通过直观的界面和先进的工具&#xff0c;用户可以快速进行文本编辑、图像调整、页面管理等操作&#xff0c;同时支持OCR技术&#…

Nginx重新编译并添加模块

1.查询Nginx配置参数 作用&#xff1a;一是检查所需模块是否已安装&#xff0c;二是将configure arguments: 后面的参数复制出来并保存&#xff0c;因为等会重新编译时还需将这些模块一同添加进去。 [rootreader ~]# nginx -V nginx version: nginx/1.24.0 built by gcc 8.5.0…

win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑

坑1&#xff1a;debug模式下生成osgEarthAnnotation时 错误&#xff1a;xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置&#xff1a;src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法&#xff1a; …

Docker Compose学习笔记

本文有以下几部分内容&#xff1a; Docker Compose用来做什么&#xff1f;Docker compose使用三步骤Docker Compose安装和查看版本Docker Compose常用命令Compose文档怎么写&#xff1f; Docker Compose用来做什么&#xff1f; Docker Compose 是Docker官方的开源项目。 Co…

镭神智能C16的ROS1驱动的安装方法

github 代码链接 git clone -b C16_V4.0 https://github.com/Lslidar/Lslidar_ROS1_driver.gitroslaunch lslidar_driver lslidar_c16.launch