【数据结构】线性结构:栈&队列&数组

来源:互联网 发布:java 程序员速成班 编辑:程序博客网 时间:2024/05/16 09:10

栈和队列是插入、删除受限制(只能在表的一端插入、删除,不能从中间插入、删除)的线性表。

它们的存储结构,以及存储结构下不同操作的属性和普通线性表是一样的。因为受限制,理解起来反而更简单。

栈(LIFO—Last In First Out)是后进先出的线性表,采用顺序存储时,称顺序栈;采用链式存储时,称链栈。

允许插入和删除的称为栈顶;另一端称为栈底。空栈出栈称“下溢”,满栈入栈称“上溢”。


顺序栈的进栈操作:1、栈顶下标值加1;2、栈顶赋值。

顺序栈的出栈操作:1、栈顶下标值减1。

顺序栈的取栈顶元素操作:按下标值直接取,时间复杂度为O(1)(顺序表也是直接取O(1))。


链栈的进栈操作(前插):1、新增结点指向后继结点;2、头结点指向新增结点。【栈只能在栈顶进行操作,因此只能用前插算法,删除操作类似。】

链栈的出栈操作:1、取出栈顶元素;2、头结点指向原栈顶的下一个结点;3、释放原栈顶元素。

链栈的取栈顶元素操作:根据指针走向直接取(相当于单链表定位算法中的最优情况——取首结点),时间复杂度为O(1)。




队列(FIFO—First In First Out)是先进先出的线性表,采用顺序存储时,称顺序队列;采用链式存储时,称链队列。


顺序队列因为操作在表的两头,首指针front,尾指针rear。往往用循环队列解决“假溢出”,因此顺序队列常用循环队列。

循环队列因为是环状的,通常用取余操作确定存储位置。


无论循环队列空还是满都有front=rear,因此一般设置队列元素只剩下一个单元(.rear+1)是认为队满。


循环队列的入队列操作:1、rear值加1;2、新增结点赋值。【入队列都是从队尾处入,出队列都是从队首处出。】

循环队列的出队列操作:1、front值加1。

循环队列的取队列首元素:1、取当前front+1的值。


链队列是动态申请空间,不会出现队列满的情况,front=rear时,队列为空。


链队列的入队列操作:1、原尾结点指向新增结点;2、重置队列rear。

链队列的出队列操作:1、取出原首结点;2、头结点指针指向新首结点;3、释放原首结点。

链队列的取队列首元素:直接取当前首结点值。


数组是线性表的一种推广,其规律也符合一般线性表的规律。在类C语言的编译程序中,数组采用的是以行为主序的存储方法,也有以列为主序的存储方法。

0 0
原创粉丝点击