两道关于队列和栈的问题。
下面是课本上的两道题,小弟看不大明白,请各们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选项也完成了新结点插入,但是插到了栈顶下一个结点的下一个位置(向后插入)