首页 > 其他分享 >顺序表(一)

顺序表(一)

时间:2025-01-04 12:59:18浏览次数:3  
标签:ps arr 顺序 capacity int size

一、顺序表定义

1、顺序表概念

1.1、线性表的概念

线性表是数据结构的一种,一个线性表是n个具有相同特性的元素的有限序列。数据元素是一个抽象的符号,其具体含义在不同的情况下一般不同。常见的线性表:顺序表、链表、栈、队列等。
线性表在逻辑上是线性结构但在物理上不一定是连续的

1.2、顺序表的概念

顺序表是线性表的一种,它将数据元素存储在一段连续的存储空间中,每个元素占据一个存储单元,并按照逻辑顺序依次存放。顺序表的逻辑和物理都是线性结构。
顺序表的底层结构就是数组,顺序表通常采用数组实现,通过对数组进行封装,实现了增删改查操作。

2、顺序表分类

顺序表有静态顺序表动态顺序表两种

2.1、静态顺序表的定义

  struct SeqList
 {
   int arr[100];//定长数组
   int size;//顺序表当前有效的数据个数
 };

2.2、动态顺序表的定义

struct SeqList
{
  int* arr;//动态内存开辟,确定大小之后再去动态申请
  int size;//有效的数据个数
  int capacity;//空间大小
};
 

动态顺序表和静态顺序表相比,更加灵活,方便随时改变其空间大小,从而方便对其结构进行增删查改所以接下来的所有操作都是基于动态顺序表。

二、动态顺序表基础

1、创建一个顺序表

 typedef int SLDataType;
 typedef struct SeqList
 {
   SLDataType* arr;
   int capacity;//动态顺序表申请空间的大小
   int size;//顺序表中有效的数据个数
 }SL;
 //或者单独写一行 typedef struct SeqList SL;
 

通过 typedef 将 int 改名为 SLDataType,定义了一个类型名字,方便后期快速修改。将SeqList 改名为 SL,方便使用。

2、顺序表初始化

创建完成顺序表之后,需要对顺序表进行初始化。

void SLInit(SL* ps)
{
  ps->arr = NULL;
  ps->size = ps->capacity = 0;
}

ps 是指针变量,用于接受地址,这里进行的是址拷贝

3、顺序表的销毁

前言:

顺序表的销毁主要是为了释放不再使用的内存空间,避免内存泄漏。在程序运行过程中,顺序表可能会动态地分配内存空间来存储元素。当顺序表不再需要时,如果不进行销毁操作,之前分配的内存空间将不会被系统回收,导致内存资源浪费,进而可能引发内存泄漏问题。

 void SLDestroy(SL* ps)
 {
   if(ps->arr)
   {
     free(ps->arr)
   }//判断顺序表不为空即申请的有空间,有空间要销毁
   ps->arr = NULL;//销毁完arr要置为空
   ps->capacity = ps->size =0;//size 和capacity也要销毁
}

4、顺序表扩容检查

在进行顺序表的插入操作中,如果capacity为0,则插入不了数据,这时候要进行扩容,所以在进行插入操作之前,要进行扩容检查操作。

 void SLCheckCapacity(SL* ps,SLDataType x)
 {
   assert(ps);//ps不能为空
   if(ps->capacity == ps->size)//当capacity与size的值相等时,说明需要扩容
   {
      int newCapaciry =ps-> capacity = 0 ? 4: 2*ps->capacity;
      //当capacity初始化为0时,直接相乘的结还是0!所以capacity不能为0,定义一个新的变量newCapacity,扩容以2倍扩容
      SLDataType* tmp = (SLDataType*)realloc(ps->arr;newCapacity*sizeof(SLDataType));//扩容用realloc函数,定义一个新的变量tmp,r如果申请空间成功,再将tmp的值给ps->arr
      if(tmp == NULL)
      {
        perror("realloc fail!");
        exit(1);
      }//如果tmp为空,说明申请空间失败,报错
      ps->arr = tmp;//申请空间成功
      ps->capacity = newCapacity;//空间大小同步改为capacity
 }

5、顺序表的打印

传址

 void SLPrint(SL* ps)
 {
   for(int i = 0;i<ps->size;i++)
   {
    printf("%d",ps->arr[i]);
   }
printf("\n");

或者传值

 void SLPrint(SL S)
 {
   for(int i = 0;i<ps->size;i++)
   {
     printf("%d",s.arr[i]);
   }
printf("\n");

两种写法都可以

未完待续…

标签:ps,arr,顺序,capacity,int,size
From: https://blog.csdn.net/2301_80741580/article/details/144921216

相关文章

  • kafka其他方式的多分区顺序消费(待补充)
    除单分区顺序消费外,Kafka还可通过以下方式实现消息顺序消费:1.基于事务的跨分区顺序消费原理:Kafka的事务机制允许应用程序在多个分区上原子性地写入消息,从而保证这些消息在多个分区间的顺序性。生产者开启事务后,一系列消息的发送被视为一个原子操作,要么全部成功,要么全部失......
  • 数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
    查找(检索):定义:从给定的数据中找到对应的K1,顺序查找:O(n)的从前向后的遍历2,对半查找,要求有序从中间开始查找,每次检查中间的是否正确,不正确就根据性质去左边or右边找2.1对半插入排序在找位置的时候是logn去找,但是最后需要换位置排序之后仍然是O()N^2)对同一序列分别......
  • 深入理解计算机系统 4.3 Y86-64 的顺序实现
    4.3.1将处理组织成阶段通常,处理一条指令包括很多操作。将它们组织成某个特殊的阶段序列,即使指令的动作差异很大,但所有的指令都遵循统一的序列。每一步的具体处理取决于正在执行的指令。创建这样一个框架,我们就能够设计一个充分利用硬件的处理器。下面是关于各个阶段以及各阶......
  • vue 父子组件的生命周期渲染顺序
    在Vue中,父子组件的生命周期钩子函数执行顺序遵循一定的规则。以下是父子组件渲染时的生命周期调用顺序:父子组件渲染顺序父组件beforeCreate父组件created父组件beforeMount子组件beforeCreate子组件created子组件beforeMount子组件mounted父组件mounted更新......
  • 408数据结构—顺序表和链表
    一、写在最前线性表是一种逻辑结构,表示元素之间一对一的相邻关系,同时还有非线性表顺序表和链表是存储结构,两者属于不同层面的概念我们可以用顺序表和链表实现线性表线性表:个数有限,相同类型,有先后次序(前驱后驱)二、顺序表定义线性表的顺序存储又称顺序表。它是用一组......
  • 两个定时任务的并发问题,导致数据处理的顺序和状态变得混乱
    1.背景:有两个定时任务在特定时间触发,同时对数据进行操作,且任务之间存在并发执行的场景。主要涉及的表为lingyejun_task,涉及到的操作有:数据插入、推送、状态更新和错误处理。定时任务A负责生成数据,定时任务B负责将生成好的数据处理并推送到第三方系统,由于出问题的时候定时任务A......
  • DiskSpd 是一个由微软开发的强大的存储性能测试工具,主要用于测试磁盘、存储设备和系统
    ReleaseDISKSPD2.2·microsoft/diskspd·GitHub 什么是DiskSpd?DiskSpd是一个由微软开发的强大的存储性能测试工具,主要用于测试磁盘、存储设备和系统的I/O性能。它是一个命令行工具,允许用户模拟不同的负载模式(如顺序读取、顺序写入、随机读取、随机写入等)来评估磁盘......
  • RocketMQ 消息顺序与事务机制详解
    目录一、简介二、RocketMQ架构概述三、RocketMQ消息流转过程四、RocketMQ消息顺序与事务五、RocketMQ高可用性与扩展性六、RocketMQ应用场景七、总结一、简介RocketMQ是一款高吞吐量、高可扩展性的分布式消息中间件,由阿里巴巴开源,并已成为Apache的顶级项目......
  • 在js中如何实现顺序执行异步函数?
    在JavaScript中,有几种方法可以实现异步函数的顺序执行。以下是其中的一些方法:回调函数:这是最基本的实现异步操作顺序执行的方法。每个异步操作完成后,都会调用一个回调函数来执行下一个操作。但是,如果异步操作很多,这种方式会导致代码难以阅读和维护,通常被称为"回调地狱"。asyn......
  • 数据结构--顺序表
    目录一、顺序表的定义二、顺序表的实现1.构建顺序表类以及准备内置函数2.顺序表的取值3.顺序表的查找4.顺序表的插入5.顺序表的删除三、整合起来一、顺序表的定义    由n(n≥0)个数据特性相同的元素构成的有限序列称为线性表,当n=0时被称为空表。......