数据结构:队列与栈问题

1.队列与栈(栈有记忆功能,队列删除,插入效率比较低下)

1.

队列删除元素是在队首进行,队列是现进现出,相对来说,队首元素是最先进入队列的,因此出队应该是在队首进行。队列其实就和我们平时排队一样的

2.

栈与队列是非线性结构,应该是线性结构,再确切点说是访问受限的线性表 

线性链表是非线性结构,应该是线性结构 

二叉树是线性结构,应该是非线性结构(层次结构

 

3.

BFS需要队列的辅助,深度优先需要栈的辅助。

图的拓扑排序,深度优先 关键路径算法用的栈辅助 

树的层次遍历 图的广度优先遍历用的队列辅助

递归是栈实现的。栈是先进后出,也就是上次递归调用的时候,保存在栈顶, 

在返回的时候出栈,所以是递归是依靠栈实现的. 

PS: 非递归形式的深度优先搜索要用栈,而广度优先使用了队列。

 

4.
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

5.

允许队列进行的操作

(1).删除对头元素

(2).

6.

关于循环队列的一些计算问题: 

front为队头、rear为队尾、maxSize为队列的总容量、m为队列中元素的个数: 

队空:front = rear 

队满:(rear + 1) % maxSize = front 

出队:front = (front + 1) % maxSize 

进队:rear = (rear + 1) % maxSize 

队列中元素的个数 m = (rear - front + maxSize) % maxSize

7.
C中,带链的队列中,队头指针始终指向头结点,头结点中的指针指向队头,所以队头指针实际上是固定的,删除队员只会修改头结点中的指针。而队尾插入队员,则需要先创建一个结点,插入到队列后,然后让队尾指针指向它,所以队尾指针会动态变化。

2.栈与队列的相同点:

栈的定义:限定仅在表尾进行插入和删除操作的线性表 

队列的定义:只允许在一端进行删除操作,在另外一端进行插入操作的线性表 

栈和队列只允许在端点进行操作运算

你可能感兴趣的:(数据结构)