数据结构1 线性结构

数据结构是指数据元素的结合及元素间的相互关系和构造方法。元素之间的相互关系是数据的逻辑结构,元素关系的存储形式成为存储结构。数据结构按照逻辑关系的不同分为线性结构和非线性结构两大类。其中线性结构是最基本的结构,元素顺序排列,常见的有线性表、栈、队列、数组、串。

一、线性表

1.线性表是最简单也是最常用的一种线性结构。一个线性表示n(n>=0)个元素的有限序列,非空线性表的特点为:

存在唯一的一个“第一个”元素;

存在唯一的一个“最后一个”元素;

除第一个元素外,序列中的每个元素均只有一个直接前驱;

除最后一个元素外,序列中的每个元素均只有一个直接后驱;

2.关于线性表的存储结构,有顺序存储和链式存储两种方式。顺序存储是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。链式存储则使用结点来存储数据元素,结点分为数据域和指针域,数据域用于存储元素的值,指针域则存储元素的直接前驱或直接后驱的地址,结点之间通过指针域构成一个链表。若结点中只有一个指针域,则称为单链表。

顺序存储结构无须占用额外的空间来表示元素之间的逻辑关系,而且可以随机存取表中的元素,但插入、删除数据的操作比较麻烦,需要顺次移动很多元素;链表中各数据元素的结点地址则不要求是连续的,因此必须同时存储元素之间的逻辑关系,链表的插入、删除操作都比较方便,只需修改指针域的指向即可。

3.根据结点中指针域的设置方式,还有其他几种链表结构:

双向链表:每个阶段包含两个指针,分别指向直接前驱和直接后驱,这样可以从表中任意的结点出发,从两个方向遍历链表。

循环链表,在单向链表或双向链表的基础上,令表尾结点的指针指向第一个元素,这样就可以从任意结点开始遍历整个链表了。

二、栈和队列

栈和队列的逻辑结构和线性表相同,但对其的运算有所限制。

1.栈

栈只能通过访问它的一端来实现数据的存储和检索,即对栈的操作时按照先进后出的原则进行的(Last In first out, LIFO),这一端称为栈顶,则另一端为栈底。不含任何元素的栈称为空栈。

栈的存储结构也分顺序和链式,顺序存储是用一组地址连续的存储单元依次存储自栈顶到栈底的数据元素,同时用指针top来指示栈顶元素的位置,这种结构的栈也成为顺序栈。使用这种存储方式需要预先定义栈的存储空间,栈的空间有限,所以元素入栈前,需要判断栈是否已满,否则会发生溢出。

链式存储的栈(链栈)没有溢出的问题,链栈也无须另外设置top指针

栈在表达式求值、计算机语言的实现、将递归过程转变为非递归过程的处理中有重要作用。

2.队列

队列则是一种先进先出(First in first out, FIFO)的线性表,但只能在队列的队尾(rear)插入元素,然后在队头(front)删除元素。

与顺序栈类似,顺序队列采用顺序存储结构,并需要设置队头指针和队尾指针。

链队列则为了便于操作,会添加一个头结点,并令头指针指向头结点,因此如果头指针和尾指针的值相同,则可判定队列为空。

队列常用于处理需要排队的场合,如打印队列、消息队列等。

原文地址:https://www.cnblogs.com/zhixin9001/p/8428548.html

时间: 2024-08-29 01:36:47

数据结构1 线性结构的相关文章

数据结构之线性结构

import java.util.*; class SLType{ public static void main(String args[]){ int i; SL sl = new SL(); DATA pdata; String key; System.out.println("the show of sequence list"); sl.SLlnit(sl); System.out.println("initialise sequence list is end&q

数据结构入门-线性结构

把所有的节点用一根直线串起来 连续存储[数组] 什么叫做数组:元素类型相同,大小相等 重点看代码吧,需要注意的都在注释里,多敲几遍,当然了,有些功能还没有实现,以后再实现 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 定义了一个数据类型,这个数据类型的名字叫做struct Arr,有三个成员 struct Arr { int * pBase; // 存储的是数组第一个元素的地址 int le

数据结构(1) -- 线性结构

1.顺序存储 //List.h #ifndef LIST_H_ #define LIST_H_ #define MAXSIZE 100 typedef struct _Poly { int a; int n; bool operator == (_Poly e) { if (a == e.a && n == e.n) return true; else return false; } }Poly; #define ElemType Poly typedef struct _Node { E

13. C#数据结构与算法 -- 线性结构

本文中,我们讨论了三个部分的内容: 什么是线性结构,线性结构有哪些特点 . 详细介绍了一个最简单线性结构顺序表,并且通过源代码进行一些的分析. 最后还举了一个例子,让我们更好的理解顺序表. 第一部分:什么是线性结构,线性结构有哪些特点 什么是线性结构,线性结构是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这 种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素

Java数据结构之线性表(2)

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几张,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构. 今天要讲解的是:Java线性结构 Java数据结构之线性结构 说到线性结构的话,我们可以根据其实现方式分为两类: 1)顺序结构的线性表 2)链式结构的线性表 3)栈和队列的线性表 对于1)和2)的讲解,请参考

Java数据结构之线性表

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几张,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构. 今天要讲解的是:Java线性结构 Java数据结构之线性结构 说到线性结构的话,我们可以根据其实现方式分为三类: 1)顺序结构的线性表 2)链式结构的线性表 3)栈和队列的线性表 1.顺序结构的线性表    

常见的线性结构

目录 前言 数组 数组介绍 自定义数组 实现数组的增删改查方法 动态数组 时间复杂度分析 栈 栈介绍 定义栈接口 基于数组实现栈的基本操作 使用栈实现"括号匹配"问题 队列 队列介绍 定义队列接口 数组队列 循环队列 数组队列和循环队列的性能比较 链表:最基础的动态数据结构 链表介绍 实现链表的增删改查操作 通过自定义链表实现栈 通过自定义链表实现队列 递归 前言 ??本篇博客主要是记录手写这些这数据结构的底层实现,加深对线性结构的理解,实现自己的一个小型数据结构库,也会进行简单的时间

Mooc数据结构-基础和线性结构

1 数据结构 解决问题方法的效率,跟数据的组织方式有关 解决问题方法的效率,跟空间的利用效率有关 解决问题方法的效率,跟算法的巧妙程度有关 数据结构 数据对象在计算机中的组织方式 逻辑结构 物理存储结构 数据对象必定与一系列加在其上的操作相关联 完成这些操作所用的方法就是算法 抽象数据类型(Abstract Data Type) 数据类型 数据对象集 数据集合相关联的操作集 抽象: 描述数据类型的方法不依赖与具体实现 与存放数据的机器无关 与数据存储的物理结构无关 与实现操作的算法和编程语言无关

数据结构第二讲:线性结构

参考:浙大数据结构(陈越.何钦铭)课件 1.线性表及其实现 有一个很好的问题可以方便的说明引入链表的好处,那就是一元多项式:f(x) = a0 + a1x + an-1xn-1 + anxn 的表示及运算(两个多项式相加/相减/相乘等),显然我们可以利用数组来解决这个问题,两个多项式相加就是两个数组对应分量相加.但是这引入了一个很严重的问题,如何表示多项式x + 3x2000呢?开这么大的数组明显会造成空间浪费. 解决上面遗留的问题的一个方法是用结构数组按指数大小有序存储,每一个数组元素维护两个