当前位置: 首页 > news >正文

数据结构基础知识(1)

 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

      数据结构具体指同一类数据元素中,各元素之间的相互关系,包括两个组成成分,数据的逻辑结构,数据的存储结构。逻辑结构包括:集合、线性结构、树形结构、图形结构。存储结构是指数据的逻辑结构在计算机存储空间的存放形式,包括:顺序存储结构、链式存储结构、索引存储结构、散列存储结构。

线性表

      线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

       线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。一般地,一个线性表可以表示成一个线性序列:k1,k2,…,kn,其中k1是开始结点,kn是终端结点。

在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。下面就简单的介绍一下。

数组(Array)

     在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

栈(Stack)

      栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

队列(Queue)

      一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。

      其中,队列中还有一种特殊的形式,那就是循环队列。计算机中为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。队列的操作特点是“先进先出”。循环队列主要是头指针、尾指针的使用,而且要掌握队列空与满的判定条件以及出队列、入队列操作的实现。

      从存储结构上划分,线性结构又可分为顺序表和链表。下面简单的介绍一下:

顺序表

      顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

      元素在内存中是以顺序存储的,内存的区域是一个连续的区块。

链表

       链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。

       链表中是离散的、单独的空间,通过逻辑上的指针联系起来,形成一个整体。

未完待续。。。

转载于:https://www.cnblogs.com/Ph-one/p/6396171.html

相关文章:

  • 数据结构之队列
  • 数据结构基础知识(2)
  • 软考之操作系统(1)
  • 高效编程之互斥锁和自旋锁的一些知识
  • 信号量,互斥锁,自旋锁
  • 全双工和半双工
  • spi和I2c的速率
  • 以太网接口
  • 变量分类
  • C语言8大经典排序算法(1)
  • C语言8大经典排序算法(2)
  • O(n²)、O(n)、O(1)、O(nlogn)
  • tcp与socket关系
  • linux怎么区别文本文件和二进制文件
  • Linux下的文件及文件后缀名
  • “大数据应用场景”之隔壁老王(连载四)
  • crontab执行失败的多种原因
  • CSS相对定位
  • dva中组件的懒加载
  • 目录与文件属性:编写ls
  • 使用putty远程连接linux
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 正则与JS中的正则
  • 字符串匹配基础上
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 阿里云移动端播放器高级功能介绍
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​用户画像从0到100的构建思路
  • #HarmonyOS:基础语法
  • #单片机(TB6600驱动42步进电机)
  • (2020)Java后端开发----(面试题和笔试题)
  • (办公)springboot配置aop处理请求.
  • (二)c52学习之旅-简单了解单片机
  • (二)正点原子I.MX6ULL u-boot移植
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)Android布局类型(线性布局LinearLayout)
  • (算法)N皇后问题
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) ns2/nam与nam实现相关的文件
  • (转)Linux整合apache和tomcat构建Web服务器
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ****Linux下Mysql的安装和配置
  • ... 是什么 ?... 有什么用处?
  • .NET MVC 验证码
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .Net中的设计模式——Factory Method模式
  • @AutoConfigurationPackage的使用
  • @Conditional注解详解
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @ResponseBody
  • [ 转载 ] SharePoint 资料
  • [20140403]查询是否产生日志