1.什么是栈?
后进先出的表(顺序栈 或 链栈),表尾=栈顶,表头=栈底
2.取顺序栈的栈顶元素?
if(S.top!=S.base)return *(S.top-1);
3.顺序栈和链栈怎么选择?
在应用程序无法预先估计栈可能达到的最大容量时,应该使用链栈
4.递归的应用?
创建链表,遍历输出链表中的各个节点(注:链表丶广义表丶二叉树都是具有递归特性的数据结构)
5.顺序队列"假溢出"怎么解决?
"模"运算:Q.rear=(Q.rear+1)%MAXQSIZE
6.顺序队列如何区别队满还是队空?
方法一:少用一个元素空间,队空→Q.front==Q.rear;队满→(Q.rear+1)%MAXQSIZE==Q.front
方法二:另设一个标志位
7.如何求顺序队列(循环)长度?
(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE
8.顺序队列(循环)的出队?
Status DeQueue(SqQueue &Q,QElemType &e)
{//删除Q的队头元素,用e返回其值
if(Q.front==Q.rear) return ERROR; //队空
e=Q.base[Q.front]; //保存队头元素
Q.front=(Q.front+1)%MAXQSIZE; //队头指针加1
return OK;
}
9.链队的出队?
Status DeQueue(LinkQueue &Q,QElemType &e)
{//删除Q的队头元素,用e返回其值
if(Q.front==Q.rear) return ERROR; //若队列空,则返回ERROR
p=Q.front->next; //p指向队头元素
e=p->data; //e保存队头元素的值
Q.front->next=p->next; //修改头结点的指针域
if(Q.rear==p) Q.rear=Q.front; //最后一个元素被删,队尾指针指向头结点
delete p; //释放原队头元素的空间
return OK;
}