https://www.cnblogs.com/longhai3/longhai

数据结构>>栈和队列习题

Posted on 2022-02-12 22:26  凡是过去,皆为序曲  阅读(447)  评论(0编辑  收藏  举报

已知一个栈的进栈序列为1,2,3,…,n,其输出序列的第一个元素是i,则第j(>i)个出栈元素是(  )。

A.j-i

B.n-i

C.j-i+1

D.不确定

已知一个栈的进栈序列为1,2,3,…,n,其输出序列是p1,p2,p3,…,pn。若p1=n,则pi的值是(  )

A.i

B.n-i

C.n-i+1

D.不确定

已知一个栈的进栈序列为1,2,3,…,n,其输出序列是p1,p2,p3,…,pn。若p1=3,则p2的值(  )。

A.一定是2

B.一定是1

C.可能是1

D.可能是2

已知一个栈的进栈序列为p1,p2,p3,…,pn,其输出序列是1,2,3,…,n。若p3=1,则p1的值(  )。

A.一定是2

B.可能是2 

C.不可能是2

D.一定是3

已知一个栈的进栈序列为p1,p2,p3,…,pn,其输出序列是1,2,3,…,n。若p3=3,则p1的值(  )。

A.一定是2

B.可能是2

C.不可能是1

D.一定是1

最适合用作链式队列的链表是(  )。

A.带有队头指针和队尾指针的循环单链表

B.带有队头指针和队尾指针的非循环单链表

C.只带队头指针的循环单链表

D.只带队头指针的非循环单链表

最不适合用作链式队列的链表是(  )。

A.带有队头指针的双向非循环链表

B.带有队头指针的双向循环链表

C.只带队尾指针的双向循环链表

D.只带队尾指针的循环单链表

设一个链式队列q的队头指针和队尾指针分别为front和rear,则判断队列空的条件是(  )。

A.q.front==q.rear

B.q.front==NULL

C.q.rear==NULL

D.q.front!=NULL

对一个初始为空的队列Q执行操作enQueue(Q,a),enQueue(Q,b),deQueue(Q,x),deQueue(Q,y)之后,再执行isEmpty(Q),返回的值是(  )。

A.a

B.b

C.1

D.0

为解决计算机主机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是(  )。

A.栈

B.队列

C.树

D.图

 

设一维数组elem[maxSize]存放循环队列的元素,同时以rearlength分别指示循环队列中的队尾位置和队列中所含元素的个数。下面算法的功能是:插入(EnQueue)和删除(DeQueue)元素的操作。请在空白处填入正确的语句。

  1. //设该循环队列的结构定义为
  2. #define   maxSize   100
  3. typedef   int  ElemType;
  4. typedef   struct {            //循环队列的结构定义
  5.     ElemType   elem[maxSize];   //队列存储数组
  6.     int   rear, length; //队列的队尾指针和队列长度。rear是实际的队尾位置。
  7. } CircQueue;
  8. int  EnQueue(CircQueue &Q, ElemType x)
  9. {
  10. 10.     //元素x存放到队列尾部。若进队列成功,函数返回true,否则返回false。
  11. 11.     if(___________①_____________)
  12. 12.         return  flase;                 //判队列是否不满,满则出错
  13. 13.     Q.rear = __________②__________;    //队尾指针进1
  14. 14.     _________③__________;                  //进队列
  15. 15.     _________④__________;              //队列长度加1
  16. 16.     return true;

17. }

18. int DeQueue(CircQueue &Q, ElemType &x)

19. {

  1. 20.     //从队列队头退出元素由x返回。若退队列成功,函数返回true,否则返回false。
  2. 21.     if(__________⑤__________)
  3. 22.         return  false;      //判断队列是否不空,空则出错
  4. 23.     Q.length--;            //队列长度减1
  5. 24.     x = elem[(Q.rear - Q.length + 1 + maxSize) % maxSize]; //返回原队头元素值
  6. 25.     return true;

26. }

答案

①Q.length==maxsize
②(Q.rear+1)%maxsize
③Q.elem[Q.rear]=x
④Q.length++
⑤Q.length==0

 

 

【第3-3题】下面算法的功能是:对于一个采用字符数组存放的字符串str,递归算法StrLength(char *str)求其字符个数(长度)。请在空白处填入正确的语句。

【解答】

     

  1. #include <iostream>
  2. using namespace std;
  3. int StrLength(char *str)           //求str的字符个数
  4. {
  5.     if(_______①_________)
  6.         return 0;
  7.     else
  8.         return  ________②__________;
  9. }

10.int main()

11.{

  1. char str[] = "abcd";
  2. cout << str << "的长度: " << StrLength(str) << endl;

14.}

①*str ==  '\0';
②StrLength(str + 1) + 1

【第3-4题】设有一个不带表头结点的单链表,下面递归算法的功能是:

(1) 删除以head为头指针的单链表中值为x的所有结点。

(2) 输出以head为头指针的单链表中最大结点值。

(3) 删除并释放以head为头指针的单链表中所有结点。

请在空白处填入正确的语句。

  1. (1) 
  2. void delall(LinkList &head, ElemType x)
  3. {
  4.     LinkList p;
  5.     if (head != NULL) {
  6.         if (________①_________) {
  7.             p = head;
  8.             ________②________;
  9.             free(p);
  10. 10.             _________③______________;
  11. 11.         }
  12. 12.         else
  13. 13.             delall(head->next, x);
  14. 14.     }

15. }

16. (2) 

17. ElemType MaxValue(LinkList head)

18. {

  1. 19.     ElemType m;
  2. 20.     if (__________④___________)
  3. 21.         return (head->data);
  4. 22.     m = _______⑤_________;
  5. 23.     if (_______⑥_________)
  6. 24.         return m;
  7. 25.     else
  8. 26.         return head->data;

27. }

28. (3) 

29. void release(LinkList head)

30. {

  1. 31.     if (_______⑦________) {
  2. 32.         release(head->next);
  3. 33.         _______⑧________;
  4. 34.     }

35. }

答案

①head->data == x

②head = head->next
③delall(head, x)

④head->next == NULL

⑤MaxValue(head->next)

⑥m > head->data

⑦head != NULL

⑧free(head)

随心,随记

https://www.cnblogs.com/w1hg/331817