3-2 栈和队列 练习题

【例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

猜你喜欢

转载自blog.csdn.net/weixin_42202174/article/details/88912666