首页 > 其他分享 >数据结构————顺序表

数据结构————顺序表

时间:2024-09-29 17:51:39浏览次数:8  
标签:ps 顺序 capacity 线性表 SL 空间 数据结构

1.线性表

什么是线性表呢大家往下面看:

其实线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的 数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串( 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储 。 ) 2.顺序表 顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组 存储 。 想必大家有很多疑问这不就是数组嘛为什么叫顺序表呢那他俩的区别到底是啥呢? 其他他俩的区别在于 顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝ 2.2 分类 2.2.1静态顺序表 静态顺序表缺点: 就是空间少了不够用,空间多了又造成空间的浪费,那有没有好的方法呢? 接下来就要说到动态顺序表了 2.2.2  动态顺序表 动态顺序表:可以增肉当你空间不够用的时候可以去扩大空间.那这个空间是想扩大多少就扩大多少吗?请思考一下。 2.3顺序表问题与思考 中间/头部的插⼊删除,时间复杂度为O(N) 增容需要申请新空间,拷⻉数据,释放旧空间。会有不⼩的消耗。 增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到200, 我们 2.3.1 动态顺序表的实现 一般实现要分为三个文件:顺序表头文件,顺序表源文件,顺序表测试文件 Seqlist.h (顺序表头文件--名字可以自己取) #define INIT_CAPACITY 4 typedef int SLDataType;---- 不知道具体类型可以使用声明方便后期修改 // 动态顺序表 -- 按需申请 typedef struct SeqList { SLDataType* a;--- 定义一个顺序表数组 int size; -----  有效数据个数 int capacity; ----- 空间容量 }SL; void SLInit(SL* ps);--- 初始化声明 void charu(SL* ps, SLDatatype x);---- 尾插 Seqlist.c (顺序表源文件) #include "Seqlist.h"
void SLinit(SL *ps)------ 初始化
{
    ps->arr = NULL;
    ps->size = ps->capacity = 0;
}
void charu(SL* ps, SLDatatype x)------- 扩容
{
    
    if (ps->size == ps->capacity)----- -判断有效数据和空间是不是一样如如果一样就扩容
    {
        int  newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
        SLDatatype *tmp = (SLDatatype*)realloc(ps->arr,newcapacity *2*sizeof(SLDatatype));
        if (tmp == NULL)------ 判断扩容是否成功
        {
            perror("realloc fail");
            exit(1); 
        }
        ps->arr = tmp;--------- 把新的空间赋给数组
        ps->capacity = newcapacity;---------把新的容量赋给原来的
    }
    ps->arr[ps->size++] = x;---- 尾插
} Test.c (顺序表测试文件)

#include "Seqlist.h"

void SLtest()
{
    SL sl;  ---声明一个结构体
    SLinit(&sl);
    charu(&sl,1);
}
int main()
{
    SLtest();

此致就结束了顺序表的尾插!

标签:ps,顺序,capacity,线性表,SL,空间,数据结构
From: https://blog.csdn.net/qwer55588/article/details/142626455

相关文章

  • 数据结构(顺序表)
    无论你期望或者不期望,清晨依旧来临。--谏山创《进击的巨人》线性表的概念1.线性表是n个具有相同特性的数据元素的有限序列。2.线性表在逻辑上是线性结构,但是在物理结构上并不⼀定是连续的。3.线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表的概念......
  • C++ 静态顺序表和动态顺序表
    对比静态顺序表与动态顺序表特性静态顺序表动态顺序表大小固定动态内存管理简单复杂随机访问快速快速插入/删除效率较低较低(需移动元素)扩展能力不可扩展可扩展C++静态顺序表概述定义:静态顺序表是一种线性表的实现方式,采用一段连续的内存空间存储数据元素,具有固定的大小。在......
  • 算法实战:剖析 Redis 常用的数据类型对应的数据结构
    算法实战:剖析Redis常用的数据类型对应的数据结构Redis是一个非常流行的内存数据库,它提供了多种数据类型,每种数据类型都有其特定的数据结构支持。了解这些数据结构对于深入理解Redis的工作原理和优化使用非常重要。本文将剖析Redis常用的数据类型对应的数据结构,并通......
  • 18年408数据结构
    第一题:解析:这道题很简单,按部就班的做就可以了。画出S1,S2两个栈的情况:S1:      S2:                    2        +        3        -        8        *......
  • 第5周 5.1 顺序与选择结构
    5.1顺序与选择结构5.1.1顺序结构顺序结构是程序中最简单、最基本的流程控制结构,它按照程序中语句出现的先后顺序依次执行,直到程序的结束。顺序结构示例:publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("Hel......
  • 数据结构设计
    数据结构设计设计有setAll功能的哈希表加时间戳#include<vector>#include<iostream>#include<algorithm>#include<unordered_map>usingnamespacestd;//<key,<val,time>>unordered_map<int,pair<int,int>>map;intsetA......
  • 关于RocketMQ的顺序消息
     在RocketMQ中,实现顺序消息的确需要一些特定的配置和注意事项。1.**OrderProducerBean**:使用OrderProducerBean可以保证消息的顺序发送。它会将消息发送到同一个队列中,从而保证顺序。然而,确保顺序的前提是所有相关的消息都应该使用相同的键(key)进行发送,以确保它们被路......
  • 嵌入式学习--数据结构+算法
    嵌入式学习--数据结构+算法数据结构1.1数据1.2逻辑结构1.3存储结构1)顺序存储结构2)链式存储结构1.4操作(数据的运算)算法2.1算法与程序2.2算法与数据结构2.3算法的特性2.4如何评价一个算法的好坏?2.5时间复杂度2.6空间复杂度数据结构数据的逻辑结构、存储结构、......
  • 【数据结构】堆(Heap)详解
     在深入了解堆这一重要的数据结构之前,不妨先回顾一下我之前的作品——“二叉树详解”。上篇文章......
  • 数据结构:速通并查集
    并查集用来干什么:处理不相交的集合的合并以及查询相交集合的个数等情况例题(自行搜索):36024年第一批笔试算法题传染病防控 并查集具有三个操作initfindunioninit初始化集合,将当前所有节点的父节点设置为自己intfa[]=newint[10000];intsize[]=newint[10000];//这里是......