- 20
- 0
- 0
- 约3.94万字
- 2016-12-16 发布
文档工具:
- 1、本文档共7页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话: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)