刚才发现一个网站上,讲栈讲的特别好,给大家推荐下
一、 填空
1、循环队列队满的条件是( front ==(rear+1)mod n ),队空的条件是( rear == front )。
解释:
请参考这篇博文http://blog.csdn.net/huangkq1989/article/details/5719529
2、设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5, 经过push,push,pop,push,pop,push,push后,输出序列是( 23 ),栈顶指针是( 1003H )。
解释:
切记push操作是往栈顶插入元素,而pop操作是删除栈顶元素,即把栈顶元素输出。
push | push /pop | push/pop | push | push |
---|---|---|---|---|
1 | 2 | 3 | 4 | 5 |
1000H | 1001H | 1001H | 1001H | 1002H |
栈顶指针在栈顶元素的下一个位置上
3、设一个链栈的栈顶指针为ls,栈中结点两个字段分别为data和next,其中next是指示后继结点的指针,栈空的条件是( ls=Null ),如果栈不空,则退栈操作为p=ls;( ls=ls->next );free(p)。
解释:
栈顶指针Is为Null,即栈为空栈,这个需要记住
退栈的话,形象点说,就是把栈里面的往外推,后进先出的原则
p=ls;//把栈顶指针ls赋值给p
ls=ls->next;//改变栈顶指针的值为它的后继指针
free(p);//释放p
4、栈和队列是两种特殊的线性表,栈的特点是( 后进先出 ),队列的特点是( 先进先出 ),二者的共同点是只允许在它们的( 端点 )处插入和删除数据元素。
解释: