zoukankan      html  css  js  c++  java
  • 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
    ");
    			return false;
    		}
    		S->Top1++;
    		S->Data[S->Top1]=X;
    		return true;
    	}
    	else if(Tag==2)
    	{
    		if(S->Top2==S->Top1+1)
    		{
    			printf("Stack Full
    ");
    			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
    ",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
    ",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
    ");
    		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
    ");
    		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:列车调度。
    错题代码:未写。。。
    代码体会:
    注意:分析错误原因及体会,主要讲代码错误

  • 相关阅读:
    论线段树:二
    BST 二叉搜索树
    论线段树:一
    [luoguP3627][APIO2009]抢掠计划
    二分图匹配(匈牙利算法)
    SPFA 全面讲解
    markdown的常用高级操作。
    UVA11235 Frequent values
    P2279 [HNOI2003]消防局的设立
    P2216 [HAOI2007]理想的正方形
  • 原文地址:https://www.cnblogs.com/lkjhgfdsa/p/10747151.html
Copyright © 2011-2022 走看看