【例1】、设输入序列1、2、3、4,则下述序列中(D )不可能是出栈序列。【中科院中国科技大学2005】
A. 1、2、3、4 B. 4、 3、2、1
C. 1、3、4、2 D.4、1、2、3
D. 4出后,若1出,则表明2、3已出,所以2、3不能在1后边出来。
1、若入栈序列是 a, b, c, d, e,则不可能的出栈序列是(C)。
(A) edcba(B)decba(C)dceab (D)abcde
2、判定一个栈 ST(最多元素为m0) 为空的条件是(B)。
(A) ST.top != ST.base (B)ST.top == ST.base
(C)ST.top != ST.base +m0 (D)ST.top == ST.base+ m0
3、判定一个栈 ST(最多元素为m0) 为满的条件是(C)。
(A) ST.top != ST.base (B)ST.top == ST.base
(C)ST.top != ST.base +m0 (D)ST.top == ST.base+ m0
判定一个栈ST(最底元素为m0)为满的条件是ST->top==m0
4. 栈与递归的实现
递归:一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数。
试着将下列递推过程改写为递归过程。
如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。试着编写与此结构相应的入队和出队算法。
1. 队列(queue)是一种先进先出的线性表。
2. 队列只允许在表的一端进行插入,而在另一端进行删除元素。
3. 允许插入的一端叫做队尾(rear),允许删除的一端称为队头(front)。
4. 双端队列:线性表 (double-ended queue) 限定插入和删除在表的两端进行。
1. 输出受限的双端队列:一个端点可插入和删除,另一个端点仅可插入。
2. 输入受限的双端队列:一个端点可插入和删除,另一个端点仅可删除。
15.用 C 语言定义链队列结构如下:
typedef struct QNode {
QElemType data;
struct QNode *next;
} QNode, *QueuePtr; // 定义队列的结点
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
}LinkQueue;
Status InitQueue (LinkQueue &Q)
{ // 构造一个空队列 Q
Q.front = Q.rear = (QueuePtr) malloc (sizeof(QNode));
if (!Q.front) exit (OVERFLOW); // 存储分配失败
Q.front -> next = NULL;
return OK;
}
销毁队列:
Status DestroyQueue (LinkQueue &Q){
while (Q.front) {
Q.rear = Q.front -> next;
free (Q.front);
Q.front = Q.rear;
}
return OK; Q.rear= null
}
Q.front= null
插入操作在链队列中的实现
Status EnQueue (LinkQueue &Q, QElemType e){
// 插入元素 e 为 Q 的新的队尾元素
p = (QueuePtr) malloc (sizeof (QNode));
if (!p) exit (OVERFLOW);
p -> data = e; p -> next = NULL;
Q.rear -> next = p;
Q.rear = p;
return OK;
}
删除操作在链队列中的实现
Status DeQueue (LinkQueue &Q, QElemType &e){
if (Q.front == Q.rear) return ERROR;
p = Q.front -> next;
e = p -> data;
Q.front -> next = p -> next;
if (Q.rear == p) Q.rear = Q.front;
free (p);
return OK;
}
16.队列的顺序存储结构:
#define MAXQSIZE 100 //最大队列长度
typedef struct {
QElemType *base; // 预分配存储空间基址
int front; // 头指针,若队列不空,
// 指向队列头元素
int rear; // 尾指针,若队列不空,
// 指向队列尾元素 的下一个位置
} SqQueue;
17.头尾指针相等时队列为空 ,入队,尾指针增 1,出队,头指针增 1