数组和队列的区别

作者&投稿:许锦 (若有异议请与网页底部的电邮联系)
栈和队列 与 数组的关系~

栈和队列都可以用数组来存储。
栈是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈;从一个栈删除元素又称作出栈或退栈。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
栈和队列可以用数组Q[1…m]来存储,数组的上界m即是所容许的最大容量。在运算中需设两个指针:head,队头指针或栈顶指针,指向实际头元素;tail,队尾指针或栈底指针,指向实际尾元素的下一个位置。

扩展资料:
一般情况下,数组的头尾两个指针的初值设为0,这时无论是栈还是队列都为空,没有元素。此时如果还要执行入队操作,则要发生"上溢",但实际上数组中还有空位置,所以这种溢出称为"假溢出"。
克服假溢出的方法有两种。一种是将数组中的所有元素均向低地址区移动,显然这种方法是很浪费时间的;另一种方法是将数组存储区看成是一个首尾相接的环形区域。当存放到n地址后,下一个地址就"翻转"为1。

int a[3][4]这个无需多说,就是一个二维数组。
int (*p)[4]就相当于int p[][4],它就是一个二维数组的指针,可以指向一个第二维度为4的二维数组。而a就是这样的数组,因而下面是合法的。
p=a;
int *p[3]是指针数组。说白了,就是定义了三个指针,分别为p[0],p[1],p[2]。可以将他们单独拿来使用。
int a1,a2,a3;
p[0]=&a1;
p[1]=&a2;
p[2]=&a3;

数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。

1 数组
数组是最最基本的数据结构,很多语言都内置支持数组。数组是使用一块连续的内存空间保存数据,保存的数据的个数在分配内存的时候就是确定的:
访问数组中第 n 个数据的时间花费是 O(1) 但是要在数组中查找一个指定的数据则是 O(N)。当向数组中插入或者删除数据的时候,最好的情况是在数组的末尾进行操作,时间复杂度是O(1) ,但是最坏情况是插入或者删除第一个数据,时间复杂度是 O(N) 。在数组的任意位置插入或者删除数据的时候,后面的数据全部需要移动,移动的数据还是和数据个数有关所以总体的时间复杂度仍然是 O(N) 。

2 链表
链表是在非连续的内存单元中保存数据,并且通过指针将各个内存单元链接在一起,最有一个节点的指针指向 NULL 。链表不需要提前分配固定大小存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中。
在链表中查找第 n 个数据以及查找指定的数据的时间复杂度是 O(N) ,但是插入和删除数据的时间复杂度是 O(1) ,因为只需要调整指针就可以:

向上面这样的链表结构在插入和删除的时候编程会比较困难,因为需要记住当前节点的前一个节点,这样才能完成插入和删除。为了简便通常使用带有头节点的链表:

上面的链表是单链表,此外还有双链表,就是节点中包含指向下一个节点的指针和指向上一个节点的指针:

不带有头节点的双向链表在插入和删除数据的时候也不会出现单链表那样的问题。此外还有一种链表是循环链表,它是将双向链表的头尾相接:
向循环双向链表和循环链表中插入或者从中删除数据只是多移动几个指针。

3 堆栈
堆栈实现了一种后进先出的语义 (LIFO) 。可以使用数组或者是链表来实现
对于堆栈中的数据的所有操作都是在栈的顶部完成的,只可以查看栈顶部的数据,只能够向栈的顶部压入数据,也只能从栈的顶部弹出数据。

4 队列
队列实现了先入先出的语义 (FIFO) 。队列也可以使用数组和链表来实现:

队列只允许在队尾添加数据,在队头删除数据。但是可以查看队头和队尾的数据。还有一种是双端队列,在两端都可以插入和删除:

数组和队列的区别
答:数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。1 数组 数组是最最基本的数据结构,很多语言都内置支持数组。数组是使用一块连续的内存空间保存数据,保存的数据的个数在分配内存的时候就是确定的:访问数组中第 n 个数据的时间花费是 O(1) 但是要在数组中查找一...

java,优先级队列和有序数组区别?
答:数组是有序的,访问和修改都要按下标一个个地去找。优先级队列,是要看优先级的,谁的优先级更高,谁就先得到权限。不分排队的顺序。

简答题:简述栈、队列、串、数组的共同点和不同点,他们属于线性表的原...
答:栈是特殊的线性表,只能在表头进行插入和删除操作,采用后进先出法;队列也是一种特殊的线性表,只允许在表头进行删除,在表的末尾进行插入操作,采用先进先出法;串是由零到n个字符组成的有限序列;数组可以简单理解为n个串组成。剩下的自己再补充吧。。。

常用数据结构有哪些
答:队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队。4、链表 链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储...

栈和队列 与 数组的关系
答:队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。栈和队列可以用数组Q[1…m]来存储,数组的上界m即是所容许的最大容量。在运算中需设两个指针:head,队头指针或栈顶指针,指向实际头元素;tail,队尾指针或栈底指针,指向实际尾元素的下一个位置。

在C++语言中,什么是队列?
答:最后说你的困惑,你之所以吧队列跟数组联系到一起,那么你现在理解的队列,是顺序队列。他们的关系是什么呢,首先数组是语言的东西,队列是数据结构的东西。然后,如果你在C++里面实现书序队列,那么,你可以理解成,数组就是顺序数组(其实没有链表数组),它跟顺序队列,书序栈,顺序二叉树等等,是平行的...

一文带你认识30个重要的数据结构和算法
答:队列是受限访问集合中的另一种数据类型,就像前面讨论的堆栈一样。主要区别在于队列是按照FIFO(先进先出)模型组织的:队列中第一个插入的元素是第一个被移除的元素。队列可以使用固定长度的数组、循环数组或链表来实现。它们是做什么用的?这种抽象数据类型 (ADT) 的最佳用途当然是模拟现实生活中的队列...

队列和散列表跟数据的存储结构有关还是无关?
答:队列和散列表的实现方式和存储结构有关,不同的存储结构会影响它们的实现方式和性能表现。队列是一种先进先出(FIFO)的数据结构,主要有两种实现方式:数组和链表。用数组实现的队列叫做顺序队列,用链表实现的队列叫做链式队列。对于顺序队列,队列元素是顺序存储在连续的内存空间中的,队列的头部和尾部分别...

循环队列是线性还是非线性
答:1. 线性结构和队列 线性结构是指元素之间存在一对一的关系,即每个元素都只有前一个和后一个元素。数组和链表是线性结构的典型代表。队列作为一种线性结构,它有两个端点,一个是队头(Front),用于删除元素;另一个是队尾(Rear),用于插入元素。新的元素被插入到队尾,而最早插入的元素总是在队...

判断题:所谓“循环队列”是指用单向循环链表或者循环数组表示的队列...
答:包括单链表,双链表,循环链表等。队列的顺序存储结构一般采用循环队列的形式。循环队列的操作是通过计算数组的触摸,这是存储在秩序,和循环链表是结束连接,所以循环链表不是一个循环队列,两种不同的存储结构,但功能是一样的,实施周期循环队列顺序存储在两个方面,连锁商店是循环链表。