码迷,mamicode.com
首页 > 其他好文 > 详细

博客作业03--栈和队列

时间:2018-04-15 12:11:00      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:序列   初始   创建   直接   方法   小数   运算   create   for   

1.学习总结

技术分享图片

2.PTA实验作业

2.1 题目1:

7-1 jmu-字符串是否对称

2.2 设计思路

        定义ElemType变量e,定义一个栈s,定义整型变量i,flag
        为栈创建空间
        for i=0 to str[i]不等于‘\0‘
        将字符数组里的字符一一存放入栈
        end for
        for i=0 to str[i]不等于‘\0‘
            将栈顶元素出栈,赋值给e
            如果 str[i]跟e不相等
                    flag=1
        end for
        如果flag等于0
        说明对称,输出yes
        否则,输出no

2.3 代码截图

技术分享图片

2.4 PTA提交列表说明

技术分享图片
编译器忘了改成c++

2.1 题目2:

7-3 表达式转换

2.2 设计思路

        定义栈S,定义整型变量i,j,定义字符变量e和字符数组str
        读取字符串
        创建栈S并申请空间
        while  str[i]不等于‘\0‘
            如果是小数点,直接输出
            如果是数字,直接输出
            否则,如果是+
                判断如果是代表正号,直接输出
                如果是运算符,当栈顶运算符的优先级高于或等于该运算符则将栈顶运算符输出,直到栈顶运算符的优先级小于该运算符
                        否则压入栈
            否则,如果是-
                判断如果是代表负号,直接输出
                如果是运算符,当栈顶运算符的优先级高于或等于该运算符则将栈顶运算符输出,直到栈顶运算符的优先级小于该运算符
                        否则压入栈
            否则,如果是(
                直接压入栈
            否则,如果是)
                将遇到第一个左括号之前的运算符都输出
            否则,如果是*或/
                如果栈顶运算符的优先级高于或等于该运算符则将栈顶运算符输出,直到栈顶运算符的优先级小于该运算符
                否则压入栈
        end while
        当栈不为空时,将栈里的元素都输出

2.3 代码截图

技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片

2.4 PTA提交列表说明

技术分享图片
第一次没有考虑到小数时的情况,修改过后这个测试点就对了。
运算数前有正负号这个测试点改了蛮久的,不知道正号不用输出来,后面百度题目的时候,看到别人列了测试数据出来,就尝试了一下,没想到就这样对了

2.1 题目3:

7-1 jmu-报数游戏

2.2 设计思路

        定义整型变量count=0,e,k,i,n,m,定义队列game
        输入n、m的值
        如果n小于m
            输出error!
        否则
            初始化队列game
            for i=1 to i小于等于n
                 按顺序入队列
            end for
        
            while队列不为空
                第一个元素出队列并报数count++
                如果报的数count为m
                        将这个元素输出
                        count重新赋值为0
                否则这个元素继续进入队列
            end while
        

2.3 代码截图

技术分享图片

2.4 PTA提交列表说明

技术分享图片
第一次做用的是以前的方法,听老师讲了类似的题目后,忽然就懂了怎么用队列做

3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

技术分享图片
技术分享图片

3.2 队列PTA排名

技术分享图片
技术分享图片

3.3 我的总分:

209

4. 阅读代码

/*
借助栈 非递归遍历二叉树 
2018.4.1 
*/ 
#include<stdio.h>
#include<stdlib.h>
//返回的结果
typedef enum{
    ERROR,SUCCESS
}STATUS; 
//结点的数据类型 
typedef char TREEELEM;
//二叉树结点 
typedef struct BinTreeNode{
    TREEELEM data;
    struct BinTreeNode* lChild,*rChild;
}BinTreeNode,*PtrToBinTree;
typedef PtrToBinTree STACKELEM;
//栈结点 
typedef struct StackLinkNode{
    STACKELEM data;
    struct StackLinkNode * next;
}StackLinkNode,*PtrToLinkStack;  

//////////////////////栈//操//作//开//始/////////////////////////////////////
//创建栈
STATUS CreateStackLink(PtrToLinkStack *S){
    *S = (PtrToLinkStack)malloc(sizeof(StackLinkNode));
    if(*S){
        (*S)->next = NULL;
        return SUCCESS; 
    }
    return ERROR;   
} 
//栈判空
bool EmptyStack(PtrToLinkStack S){
    if(S->next){
        return false;
    }
    return true;
} 
//压栈
STATUS Push(PtrToLinkStack S,STACKELEM e){
    PtrToLinkStack temp = (PtrToLinkStack)malloc(sizeof(StackLinkNode));
    if(!temp){
        return ERROR;
    }
    temp->data = e;
    temp->next = S->next;
    S->next = temp; 
    return SUCCESS;
} 
//出栈
STACKELEM Pop(PtrToLinkStack S){
    if(EmptyStack(S)){
        return NULL;
    }
    PtrToLinkStack temp = S->next;
    S->next = temp->next;
    STACKELEM data = temp->data;
    free(temp);
    return data;
}  
//获取栈顶元素 
STACKELEM GetTop(PtrToLinkStack S){
    return S->next->data;
}
//测试栈操作 
//void TestStack(){
//  PtrToLinkStack S;
//  CreateStackLink(&S);
//  int n;
//  char c; 
//  scanf("%d",&n);
//  getchar();
//  while(n--){
//      scanf("%c",&c);
//      Push(S,c);
//  }
//  c = GetTop(S);
//  printf("%c\n",c);
//  while(!EmptyStack(S)){
//      c = Pop(S);
//      printf("%c ",c);
//  }
//  printf("\n");
//} 
//////////////////////栈//操//作//结//束/////////////////////////////////////


///////////////////////树//操//作//开//始///////////////////////////////////// 
/*
按先序序列输入,如果结点为空请输入“#” 
*/
void Create(PtrToBinTree *T){
    char c;
    scanf("%c",&c);
    if(c == ‘#‘){
        *T = NULL;
        return ;
    } 
    *T = (PtrToBinTree)malloc(sizeof(BinTreeNode));
    (*T)->data = c;
    Create(&((*T)->lChild));
    Create(&((*T)->rChild));
}
/*
访问树结点 
*/ 
void Visit(PtrToBinTree p){
    if(p){
        printf("%c ",p->data);
    }
} 
/*
中序遍历非递归算法 
*/ 
void NRInOrd(PtrToBinTree T){
    
    PtrToLinkStack S;
    CreateStackLink(&S);
    PtrToBinTree p = T;
    
    while(p || !EmptyStack(S)){
        if(p){          
            Push(S,p);
            p = p->lChild;
        } else {
            p = Pop(S);
            Visit(p);           
            p = p->rChild;
        }
    }
    printf("\n");
} 
/*
先序遍历非递归算法 
*/ 
void NRPreOrd(PtrToBinTree T){
    PtrToLinkStack S;
    CreateStackLink(&S);
    PtrToBinTree p = T;
    
    while(p || !EmptyStack(S)){
        if(p){
            Visit(p);
            Push(S,p);
            p = p->lChild;
        } else {
            p = Pop(S);
            p= p->rChild;
        }
    }
    printf("\n");
}
/*
后序遍历非递归算法 
*/
void NRPostOrd(PtrToBinTree T){
    PtrToLinkStack S;
    CreateStackLink(&S);
    PtrToBinTree p,r;
    p = T;
    r = NULL;
    while(p || !EmptyStack(S)){
        if(p){
            Push(S,p);
            p = p->lChild;
        } else {
            p = GetTop(S);
            if(p->rChild && p->rChild!=r){
                p = p->rChild;
                Push(S,p);
                p = p->lChild;
            } else{
                p = Pop(S);
                Visit(p);
                r = p;
                p = NULL;
            }
        }
    }
    printf("\n");
}
int main(){
     
    //TestStack();
    PtrToBinTree T;
    Create(&T);
    //中序非递归遍历 
    NRInOrd(T);
    //先序非递归遍历
    NRPreOrd(T);
    //后序非递归遍历 
    NRPostOrd(T); 
    return 0;
}

代码地址
https://gitee.com/MoZhaMiao/codes/qhol864mxi31dzbegnjr244
该代码用栈的方法实现二叉树的先序、中序、后序遍历,最近正好在学二叉树,学习的时候课本用的是递归的方法。

5. 代码Git提交记录截图

技术分享图片

博客作业03--栈和队列

标签:序列   初始   创建   直接   方法   小数   运算   create   for   

原文地址:https://www.cnblogs.com/a2017/p/8728798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!