数据结构习题二(答案)

更新时间:2023-07-23 23:41:56 阅读: 评论:0

数据结构习题(2)
学号________    姓名_______  课堂号(A:周一课堂,B:周二课堂)
1.选择题
1)数据入栈顺序是a,b,c,d,e,则不可能的出栈序列是( B )
A.edcba  B.dceab  C.decba    D.abcde
2)判断一个栈S(最多有n个元素)为空的条件是( A )
p==S.ba      p!=S.ba 
p-S.ba==n    p-S.ba!=n
3)判断一个栈S(最多有n个元素)为满的条件是( C )
p==S.ba      p!=S.ba 
p-S.ba==n    p-S.ba!=n
4)判断一个循环队列Q(最多有n个元素)为空的条件是 ( A )
A.Q.rear==Q.front        B. Q.rear=(Q.front+1)%n
C. Q.rear=(Q.front-1)%n  D. Q.rear-Q.front=1
5)判断一个循环队列Q(最多有n个元素)为满的条件是 ( C )emergency是什么意思
ar==Q.front        B. Q.rear=(Q.front+1)%n
jbcC.Q.front=(Q.rear+1)%n  D. Q.front= (Q.rear-1)%n
6)表达式a*(b+c)-d的后缀表达式是( B )。
A.abcd*+-    B. abc+*d-    C. abc*+d-    D. -+*abcd
7)设计一个判别表达式中左,右括号是否配对出现的算法,采用( D )数据结构最佳。
A.线性表的顺序存储结构      B. 队列   
C. 线性表的链式存储结构      D. 栈
8)用链接方式存储的队列,在进行删除运算时( D  )。
A. 仅修改头指针  B. 仅修改尾指针   
C. 头、尾指针都要修改    D. 头、尾指针可能都要修改
9)假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为(  A )。
A.(rear-front+m)%m    B.rear-front+1     
C.(front-rear+m)%m      D.(rear-front)%m
10)若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为1和4,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( D )
    A. 1和 5        B. 2和4          C. 4和2        D. 3和5
2. 填空题
1)栈是__操作受限_____的线性表,其运算遵循__后进先出____的原则。
2)一个栈的输入序列是:1,2,3则不可能的栈输出序列是___3 1 2___。
treated3)队列的特点是__先进先出____。
4)栈的数据插入和删除操作分别称为__Push(入栈)_______和___Pop(出栈)_____。
5)9+(24/6+3*2)/5的后缀表达式为_9246/32*+5/+_____。
3.分析题
1)如果进栈的数据序列为A,B,C,D,则写出所有可能的出栈序列。
ABCD、ABDC、ACBD、ACDB、ADCB、BACD、BADC、BCAD、BCDA、BDCA、CBAD、CBDA、CDBA、DCBA。
4. 程序填空题
1)Status Pop(SqStack *S,SElemType *e)
{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
  if((*S).top==(*S).ba)
    return ERROR;
  *e=__*--(*S).top___;
  return OK;
}
2)Status EnQueue(LinkQueue *Q,QElemType e)
{ /* 插入元素e为Q的新的队尾元素 */
  QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
  if(!p) /* 存储分配失败 */
    exit(OVERFLOW);
  p->data=e;
  p->next=NULL;
  ____(*Q).rear->next__________=p;
  (*Q).rear=p;
  return OK;
}
3)int QueueLength(SqQueue Q)  //循环队列
{ /* 返回Q的元素个数,即队列的长度 */
  return ____(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE_______________;
}
4)Status EnQueue(SqQueue *Q,QElemType e)
{ /* 插入元素e为Q的新的队尾元素 */
  if(((*Q).rear+1)%MAXQSIZE==(*Q).front) /* 队列满 */
    return ERROR;
  ___(*Q).ba[(*Q).rear]______=e;
mutex  (*Q).rear=((*Q).rear+1)%MAXQSIZE;
  return OK;
}
5. 编程题
1)已知单链表La和Lb,试编写程序实现将单链表La第i个元素起的共k个元素删除并插入到单链表Lb的第j个元素之前。
【参考代码】
/* main2-2.c 检验bo2-2.c的主程序(与main2-1.c很像) */
#include"c1.h"
typedef int ElemType;
#include"c2-2.h" /* 与main2-1.c不同 */
#include"bo2-2.c" /* 与main2-1.c不同 */
Status comp(ElemType c1,ElemType c2)
{ /* 数据元素判定函数(相等为TRUE,否则为FALSE) */
  if(c1==c2)
insist的用法    return TRUE;
  el
    return FALSE;
}
void visit(ElemType c) /* 与main2-1.c不同 */
{山寨大黄鸭
  printf("%d ",c);
academician
}
void Merge(LinkList La,int i,int k,LinkList Lb,int j)
{
    int len_La,len_Lb;
    ElemType e;
特洛伊战争    int ll;
    len_La=ListLength(La);
    len_Lb=ListLength(Lb);
    if(i<1 || i>len_La || i+k>len_La || j<1 || j>len_Lb)
    {
      printf("插入位置错误,退出");
      return;   
    }
    for(ll=1;ll<=k;ll++)
    {
      ListDelete(La,i,&e);
      ListInrt(Lb,j,e);
    }
    printf("\n合并后Lb的元素:");
}
void main() 
{
  LinkList La,Lb; 
  ElemType e;
  int j,k;
  InitList(&La);
  InitList(&Lb);
  for(j=1;j<=7;j++)
      ListInrt(La,1,j);
  printf("\n链表La:");
  ListTraver(La,visit); 
  for(j=10;j>=8;j--)
      ListInrt(Lb,1,j);
  printf("\n链表Lb:");
广州室内设计学校
  ListTraver(Lb,visit); 
  Merge(La,2,3,Lb,2);
  ListTraver(Lb,visit);
  DestroyList(&La);
  DestroyList(&Lb);
杯子的英文 }

本文发布于:2023-07-23 23:41:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/186737.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:元素   队列   删除   插入   线性表   循环
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图