1.栈模拟队列
循环队列的定义,如下:
typedef struct
{int data[N];
int rear;
int front;
}deque;
循环队列有两个计数器,或者说是指针,通过两个指针完成进出和访问数据。
在循环队列中,指针初始化为0,通过求余实现循环的概念。
队列的满体现在求余后,rear+1=front;
空:rear==front。
类似定义如下的栈:
typedef struct
{int data[N];
int top1;
int top2;
}stack;
这是两个栈共享一个数组的定义。top1=-1,top2=N。两个指针相向而行,top1=top2+1时为满。
用这两个栈可以模拟队列的先进先出。
2.动态栈就是通过动态数组实现,如果满,则realloc(p,2*n)。
3.链栈和链队列的优点是不需要考虑溢出的情况。链栈的进栈是头查法,top是第一个元素的*node。参见链栈的定义。链队列是尾查法,rear始终指向尾部,front为头部。
例如:arr[]={1,2,3};
链栈为:
1->null
2->1->null
3->2->1->null
top始终是最左边的节点地址。
链队列:
1->null
1->2->null
1->2->3->null
rear始终在最右边,front记录最左边。