文章目录

  • 前言
  • 一、动态顺序表的概念
  • 二、顺序表的结构体
  • 三、基本接口
    • 1.SeqListInit(初始化数组)
    • 2.SeqListDestory(销毁数组)
    • 3. SeqListCheckCapacity(检查改顺序表是否需要扩容)
    • 4.SeqListPushBack(尾增)
    • 5.SeqListPopBack(尾删)
    • 6.SeqListPushFront(头插)
    • 7.SeqListPopFront(头删)
    • 8. SeqListFind(查找)
    • 9.SeqListInsert(插入)
    • 10.SeqListErase(删除)

前言

有几天没写了,现在补上,又水一篇(小声逼逼hh)


一、动态顺序表的概念

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

二、顺序表的结构体

typedef int SeqListDatatype;//这样子写的好处是随便可以修改存储的数据类型
typedef struct SeqList
{SLDataType* a;//指针存储一个数组的首地址int size;//表示数组存储了多少个数据int capacity;//表示实际能够存储多少数据
}SL;

三、基本接口

1.SeqListInit(初始化数组)

void SeqListInit(SL*ps)//我们只需要传递结构体的指针就可以修改结构体里面的数据
{ps->a = NULL;ps->size = ps->capacity = 0;
}

2.SeqListDestory(销毁数组)

代码如下(示例):

void SeqListDestory(SL*ps)
{free(ps->a); //我们只需要得到数组申请的首地址即可销毁掉改数组ps->a = NULL;ps->capacity =0;ps->size = 0;
}

3. SeqListCheckCapacity(检查改顺序表是否需要扩容)

void SeqListCheckCapacity(SL* ps)
{if (ps->size == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;//->的优先级比这里的运算符都高,如果该顺序表容量为零即赋值4,如果不为零即扩充到原来的两倍,而且newcapacity指的是个数SLDataType* temp = (SLDataType*)realloc(ps->a, newcapacity * (sizeof(SLDataType)));if (temp == NULL){printf("realloc fail\n");exit(-1);}ps->a = temp;ps->capacity = newcapacity;}
}

4.SeqListPushBack(尾增)

void SeqListPushBack(SL* ps, SLDataType x)
{SeqListCheckCapacity(ps);ps->a[ps->size] = x;ps->size++;
}

5.SeqListPopBack(尾删)

void SeqListPopBack(SL*ps)
{assert(ps->size > 0);ps->size--;
}

6.SeqListPushFront(头插)

void SeqListPushFront(SL*ps,SLDataType x)
{SeqListCheckCapacity(ps);int end = ps->size-1;while (end > 0){ps->a[end + 1] = ps->a[end];--end;}
}

7.SeqListPopFront(头删)

void SeqListPopFront(SL*ps)
{int begain = 0;assert(ps->size > 0);while (begain < ps->size - 1){ps->a[begain] = ps->a[begain + 1];begain++;}ps->size--;
}

8. SeqListFind(查找)

int SeqListFind(SL* ps, SLDataType x)
{if (ps->size <= 0){exit(-1);}for (int i = 0; i < ps->size; i++){if (x == ps->a[i]){return i;}}
}

9.SeqListInsert(插入)

void SeqListInsert(SL* ps, int pos, SLDataType x)
{SeqListCheckCapacity(ps);int end = ps->size;while (end>=pos){ps->a[end] = ps->a[end - 1];end--;}ps->size++;
}

10.SeqListErase(删除)

void SeqListErase(SL* ps, int pos)
{assert(ps ->size > 0);while (pos < ps->size){ps->a[pos - 1] = ps->a[pos];pos++;}ps->size--;}

数据结构基础之动态顺序表详解相关推荐

  1. 【数据结构】顺序表详解 | 从零开始步步解读 | 画图理解并调试分析

    前言: 本章节将对顺序表的概念进行介绍,着重讲解动态顺序表.对常用的接口函数进行一个个讲解,并进行解析.顺序表讲解部分将从零实现顺序表接口函数,遇到问题我会进行一步步地调试说明,通过对本章的学习不仅能 ...

  2. 【C/C++】静态顺序表详解(附完整源码)

    本章内容 1.什么是线性表 2.什么是顺序表 3.静态顺序表结构的定义 4.静态顺序表的函数接口实现 5.静态顺序表的问题及思考 1.什么是线性表 线性表(linear list)是n个具有相同特性的 ...

  3. 分享-动态性能表详解

    从IT-PUB上down下来的一些关于oracle的动态性能表的总结,在大家对oracle进行性能调整和瓶颈检查会有很大的帮助的,不是我写的,在此拿出来跟博客园的朋友分享,共同进步!       一个 ...

  4. 数据结构 严薇敏 顺序表的实现(增 删 改)及其使用方法详解

    时间复杂度 数据结构 时间复杂度和空间复杂度 目录 1.线性表 2.顺序表 2.1概念及结构 2.2 接口实现 SeqList.h SeqList.c 2.2.1初始化链表以及销毁链表的实现 初始化顺 ...

  5. 数据结构C语言实现顺序表——增删查改操作实现详解

    顺序表 顺序表是什么? 顺序表是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示.实现增删查改的功能. 顺序表所需的头文件: #include<stdio.h> ...

  6. 判断数组中某个元素除自身外是否和其他数据不同_算法工程师要懂的3种算法数据结构:线性表详解...

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 其实这些 ...

  7. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  8. 数据结构C语言实现动态顺序表

    动态顺序表的C语言实现: 正文开始@Assassin 目录: 动态顺序表的C语言实现: ==什么是顺序表?== 1. 定义顺序表结构体: 2. 初始化顺序表: 3. 销毁顺序表: 4. 打印顺序表: ...

  9. 二叉树,平衡二叉树,B-Tree,B+Tree,跳表详解

    二叉树,平衡二叉树,B-Tree,B+Tree,跳表详解 1.二叉查找树(BST) 1.1 二叉查找树概念 1.2 二叉查找树特点 2. 平衡二叉树(AVL) 2.1 平衡二叉树概念 2.2 平衡二叉 ...

最新文章

  1. java中的基本用法
  2. MATLAB_no.2:关于眼睛的_cutab=[cutab;a b];_cutab(:,2)-cutab(:,1):
  3. ubuntu下连接mysql出现Access denied for user ‘rose‘@‘localhost‘ (using password: NO)的解决方法
  4. 中国楼市场的真相————写在厦门楼市崩盘之后
  5. CPU寻址范围(寻址空间)一系列问题
  6. ie6 select出现在浮动层上面的解决方法
  7. TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具
  8. 操作 神通数据库_国产数据库最好的时代
  9. 几行代码创建属于你自己的SQL数据库
  10. Android 驱动(12)---Linux DTS(Device Tree Source)设备树详解
  11. mybatis3源码2-查询
  12. C语言叠堆在变量周围,C语言及ARM中堆栈指针SP设置的理解与总结
  13. c语言编程科学计数法,c语言编程 科学计数法
  14. 用matlab如何画中国地图,利用matlab画中国地图的几种方法
  15. 《黑客之道》- 全网最详细的kali系统安装教程
  16. oracle的imp输出日志,Oracle下的exp/imp
  17. java-se-包装类
  18. 二分查找--天堂珍珠(珍珠项链)pearl
  19. 【学习笔记】stm32+openmv串口通信实现颜色识别
  20. Mixly 二次开发 自定义库

热门文章

  1. MySQL---关于数据表的基本语句及操作 (上)
  2. 1.2G双核能量王innos D9电信版公布
  3. redis缓存雪崩,缓存穿透,缓存击穿
  4. Linux小工具之axel 快速下载
  5. 有什么开源的python汉语语音转文字项目?
  6. java通过spire.doc实现word增加水印功能
  7. 本地电脑腾讯会议PPT演讲者模式
  8. Git主干同步到分支
  9. [Android]Android 下实现点亮 Led
  10. 多线程环境中lock.trylock方法争抢锁