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

数据结构————顺序表

时间:2024-09-29 17:51:39浏览次数:15  
标签: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.线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表的概念......
  • 算法实战:剖析 Redis 常用的数据类型对应的数据结构
    算法实战:剖析Redis常用的数据类型对应的数据结构Redis是一个非常流行的内存数据库,它提供了多种数据类型,每种数据类型都有其特定的数据结构支持。了解这些数据结构对于深入理解Redis的工作原理和优化使用非常重要。本文将剖析Redis常用的数据类型对应的数据结构,并通......
  • 嵌入式学习--数据结构+算法
    嵌入式学习--数据结构+算法数据结构1.1数据1.2逻辑结构1.3存储结构1)顺序存储结构2)链式存储结构1.4操作(数据的运算)算法2.1算法与程序2.2算法与数据结构2.3算法的特性2.4如何评价一个算法的好坏?2.5时间复杂度2.6空间复杂度数据结构数据的逻辑结构、存储结构、......
  • 【数据结构】堆(Heap)详解
     在深入了解堆这一重要的数据结构之前,不妨先回顾一下我之前的作品——“二叉树详解”。上篇文章......