数据结构课习题3.doc 7页

  • 20
  • 0
  • 0
  • 约3.94万字
  • 2016-12-16 发布
文档工具:
    1. 1、本文档共7页,可阅读全部内容。
    2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
    3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
    4. 文档侵权举报电话:19940600175。
    3.1 有5个元素,其进栈次序为:A、B、C、D、E,在各种可能的出栈次序中,以元素C、D最先出栈(即C第一个且D第二个出栈)的次序有哪几个? (1)B出栈,A出栈,E进栈,E出栈,输出序列为CDBAE; (2)B出栈,E进栈,E出栈,A出栈,输出序列为CDBEA; (3)E进栈,E出栈,B出栈,A出栈,输出序列为CDEBA。 所以可能的次序有:CDBAE、CDBEA、CDEBA。 3.2 假设以I和O分别表示进栈和出栈操作,栈的初态和终栈均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列。 (1)下面所示的序列中哪些是合法的? A.IOIIOIOO B.IOOIOIIO C.IIIOIOIO D.IIIOOIOO (2)通过对(1)的分析,写出一个算法判定所给的操作序列是否合法。若合法返回1;否则返回0。(假设被判定的操作序列已存入一维数组中)。 1) A、D均合法 2) 运行结果: 核心代码: bool Judge(char a[],int n) { LiStack *s; InitStack(s); int i=0; char e; bool match=true; while(i<n && match) { if(a[i]=='I') Push(s,a[i]); else if(a[i]=='O') { if(GetTop(s,e)) { if(e!='I') match=false; else Pop(s,e); } else match=false; } i++; } if(!StackEmpty(s)) match=false; Destroy(s); return match; } 3.3 假设表达式中允许包含3种括号:圆括号、方括号和大括号。编写一个算法判断表达式中的括号是否正确配对 运行结果: 核心源代码: bool Match(char exp[],int n) { int i=0; char e; bool match=true; LiStack *st; InitStack(st); while(i<n && match) { if(exp[i]=='(' || exp[i]=='['|| exp[i]=='{') Push(st,exp[i]); else if(exp[i]==')'|| exp[i]==']'|| exp[i]=='}') { if(GetTop(st,e)==true) { if( e-exp[i] >2 ) //////////////////////////////利用ASCII的值判断 match=false; else Pop(st,e); } else match=false; } i++; } if(!StackEmpty(st)) match=false; DestroyStack(st); return match; } 3.4 设从键盘输入一整数序列a1,a2,...an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,表示输入结束。要求将队列处理成环形队列,入队和出队操作单独编写算法,并在异常情况时(如队满)打印出错。 运行结果: 源代码: #include<stdio.h> #include<malloc.h> #include<string.h> #define MAXSIZE 3 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int front,rear; }Queue; void InitQueue(Queue *&s) { s=(Queue*)malloc(sizeof(Queue)); s->front=s->rear=0; } void DestroyQueue(Queue *&s) { free(s); } bool QueueEmpty(Queue *q) { return (q->front==q->rear); } bool enQueue(Queue *&q,ElemType e) { if((q->rear+1)%MAXSIZE==q->front) return false; q->rear=(q->rear+1)%MAXSIZE; q->data[q->rear]=e; // printf("rear=%

    文档评论(0)

    • 内容提供方:wst34008
    • 审核时间:2016-12-16
    • 审核编号:8102022104000106

    相关文档

    相关课程推荐