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:列车调度。
错题代码:未写。。。
代码体会:
注意:分析错误原因及体会,主要讲代码错误

posted @ 2019-04-21 21:39  明微  阅读(472)  评论(0编辑  收藏  举报