基础的数据结构

举报
不吃鱼的猫猫 发表于 2022/10/24 14:05:23 2022/10/24
【摘要】 数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。

数据结构(英语:data structure)是计算机中存储、组织数据的方式。

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。


常见的数据结构

  数组(Array)

数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。有一维数组、二维数组和多维数组。

数组占用的内存是连续的。

对于C语言,实现二维(多维)数组的遍历时,采用行优先的编码实现,其性能更优。

  链表(Linked List)

链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。

  数组VS链表  

存储同样的数据,数组占用空间比链表小。

遍历查找数据,数组性能更优(Cache机制),而且在特定场景下支持优化算法。

数组本身不具备扩容能力,实现扩容代价大,链表本身具备扩容能力,实现更为简单高效。

插入和删除中间节点,数组实现需要移动现有的数据,而链表实现更为简单高效。

  栈(Stack)

栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。后进先出

栈是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地, 把另一端称为栈底。向一个栈插入新元素又称作进栈、 入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

除了栈的初始化(Initial)与销毁(Destroy)以外,栈需要具备2个基本操作,以及几个辅助功能

基本操作

入栈 :Push

出栈 :Pop

辅助功能

栈是否为空 :isEmpty

栈是否已满 :isFull

栈元素数量 :GetSize

栈可以可以通过数组或链表的方式来实现。如果 已知栈的最大容量,可以通过数组来实现更为简单。

数组实现的好处在于入栈出栈时不用动态分配内 存和释放内存,同时执行操作的性能较高,但是在栈初始化的时候需要一次性分配所需要的最大内存,这些内存在不使用的时候也会被占用。

当不确定栈的最大容量时,或者不想在初始化时 就分配大量内存,就可以通过链表的方式实现栈的功能。

  队列(Queue)

队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。先进先出。

除了队列的初始化(Initial)与销毁(Destroy) 以外,队列需要具备3个基本操作,以及其他几个辅助功能:

基本操作

添加元素 :Add

删除元素:Delete

获取队首 :Front

辅助功能

队列是否为空 :isEmpty

队列是否已满 :isFull

队列元素数量 :GetSize

如同栈一样,队列可以通过数组或 链表的方式实现,两种方式的优劣与栈也相似。

智能云网

智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。《戳我了解更多

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。