首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

两道关于队列和栈的有关问题

2012-02-23 
两道关于队列和栈的问题。下面是课本上的两道题,小弟看不大明白,请各们GGJJ帮忙解答一下。谢谢~~1、循环队列S

两道关于队列和栈的问题。
下面是课本上的两道题,小弟看不大明白,请各们GGJJ帮忙解答一下。谢谢~~

1、循环队列SQ采用数组空间SQ.data[0,n-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。
    A、(rear-front+n)%n       B、rear-front+1       C、rear-front-1     D、rear-front  

2、向一个栈顶指针为hs的链栈中插入结点*s时,应执行()。
    A、hs-> next=s;                                         B、s-> next=hs;hs=s;        
    C、s-> next=hs-> next;hs-> next=s;       D、s-> next=hs;hs=hs-> next;

课本给出的答案是:1、A
                                    2、B



[解决办法]
1. 一般是rear-front,但是是循环队列,所以rear-front可能小于0, 所以要对n求余
2. 链栈中,每次push的地方是指针的头,pop的也是.
[解决办法]
在插入新结点前hs是指向栈顶, 如果 newhs=hs; 那么 newhs 也会指向栈顶
同理 s-> next=hs; 那么s-> next也指向栈顶, 有时说成s指向栈顶是描述不当!(s是指向新结点)
要访问栈顶的值用 hs-> data 但 hs-> next 存储的并非是栈顶地址,而是栈顶下一个结点的!
hs指向谁,谁就是栈顶, 新结点*s想成为栈顶, 自然就 hs=s(向前插入)
C选项也完成了新结点插入,但是插到了栈顶下一个结点的下一个位置(向后插入)

热点排行