DS博客作业03--栈和队列
1.本周学习总结(0--1分)
栈(Stack)是一个后进先出的线性表,它要求只在表尾进行删除和插入操作。有一个top指针,指向栈顶元素。只能从栈顶进,从栈顶出。
队列(Queue)是一种先进先出的线性表,限定只能在表的一端进行插入,在表的另一端进行删除的特殊的线性表。有两个指针,一个rear指向队尾,一个front指向队首。从队尾进,从队首出。
2.PTA实验作业(6分)
2.1.题目1:题目名称
本题要求在一个数组中实现两个堆栈。
注意:如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果某堆栈是空的,则Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR。
2.1.1设计思路
2.1.2代码截图
Stack CreateStack( int MaxSize )
{
Stack S=(Stack)malloc(sizeof(struct SNode));
S->Data=(ElementType*)malloc(sizeof(ElementType)*MaxSize);
S->Top1=-1;
S->Top2=MaxSize;
S->MaxSize=MaxSize;
return S;
}
bool Push( Stack S, ElementType X, int Tag )
{
if(Tag==1)
{
if(S->Top1==S->Top2-1)
{
printf("Stack Full\n");
return false;
}
S->Top1++;
S->Data[S->Top1]=X;
return true;
}
else if(Tag==2)
{
if(S->Top2==S->Top1+1)
{
printf("Stack Full\n");
return false;
}
S->Top2--;
S->Data[S->Top2]=X;
return true;
}
}
ElementType Pop( Stack S, int Tag )
{
int x;
if(Tag==1)
{
if(S->Top1==-1)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}
x=S->Data[S->Top1];
S->Top1--;
return x;
}
else if(Tag==2)
{
if(S->Top2==S->MaxSize)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}
x=S->Data[S->Top2];
S->Top2++;
return x;
}
}
2.1.3本题PTA提交列表说明。
2.2 题目2
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
注意:如果队列已满,AddQ函数必须输出“Queue Full”并且返回false;如果队列是空的,则DeleteQ函数必须输出“Queue Empty”,并且返回ERROR。
2.2.1设计思路
2.2.2代码截图
bool AddQ( Queue Q, ElementType X )
{
if(Q->Count==Q->MaxSize)
{
printf("Queue Full\n");
return false;
}
Q->Data[(Q->Front+Q->Count++)%Q->MaxSize]=X;
return true;
}
ElementType DeleteQ( Queue Q )
{
int i;
if(Q->Count==0)
{
printf("Queue Empty\n");
return ERROR;
}
Q->Count--;
i=Q->Data[Q->Front];
Q->Front=(Q->Front+1)%Q->MaxSize;
return i;
}
2.2.3本题PTA提交列表说明。
2.3 题目3
假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。
若匹配,输出yes。若不匹配,输出当前栈顶元素再换行输出no,并。若栈顶为空,则输出no。
2.3.1设计思路
2.3.2代码截图
2.3.3本题PTA提交列表说明。
2.4 题目4
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
2.4.1设计思路
2.4.2代码截图
2.4.3本题PTA提交列表说明。
3、栈和队列上机考试(-3--3分)
错题6-3:输入一个后缀表达式,程序求出表达式值。
错题代码:
错误原因:
错误体会:
错题7-3:列车调度。
错题代码:未写。。。
代码体会:
注意:分析错误原因及体会,主要讲代码错误