数据结构1 线性结构

 

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

 

1、线性表数据结构

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

存在惟一的一个“第一个”元素;递归

存在惟一的一个“最后一个”元素;队列

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

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

 

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

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

 

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

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

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

 

2、栈和队列

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

 

1.栈

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

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

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

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

2.队列

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

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

链队列则为了便于操做,会添加一个头结点,并令头指针指向头结点,所以若是头指针和尾指针的值相同,则可断定队列为空。

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

相关文章
相关标签/搜索