数据结构栈和队列

1.学习总结

2.PTA实验作业

2.1 题目1 7-1 jmu-字符串是否对称

2.2 设计思路

1.定义结构体存放栈顶TOP和data,创建栈,申请空间
2.读入字符串,统计字符串的长度
3.定义整形变量record来判断奇偶数
4.for i=0 to record读入栈顶为TOP1的栈中
4.for i=j-1 to record读入栈顶为TOP2的栈中
5.for i=0 to i<record 将S->data[S->TOP1]和S->data[S->TOP2]的逐个比较。
6.i=reocrd 输出yes,否则输出no

2.3 代码截图


2.4 PTA提交列表说明。

2.1 题目2 7-1 jmu-报数游戏

2.2 设计思路

1.定义义结构体用于存放data,front,rear
2.创建队列,申请空间,令指针front和rear的起始值为0
3.for i=0 to i<num 令数组a[i]的起始值为1
4.while(1)进入循环,开始报数
5. a[i%num]==1,record++,继续下一个
6.当record=3,令 a[i%num]=0,重新开始报数
7.当a[i%num]!=1时,i++,直到a[i%num]=1
8.输出队列的值

2.3 代码截图


2.4 PTA提交列表说明

2.1 题目3 7-2 银行业务队列简单模拟

2.2 设计思路

1.定义结构体用于存放data,front,rear
2.创建队列,申请空间,令指针front和rear的起始值为0
3.for i=0 to i<n 将序号为奇数和偶数分别存入到相应的数组中
4.for i=0 to number 将js数组的值存放到队列中,直到(i+1)%2==0,将os的值存入到队列Q中.
5.for i=j to record 将剩余的序号为偶数的值存入到队列中
6.输出队列的值

2.3 代码截图


2.4 PTA提交列表说明

部分值的存放用数组进行操作造成段错误

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

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:

总分:100+78=178

4. 阅读代码

typedef struct {  
      int ord;             //通道块在路径上的“序号”  
      PosType seat;        //通道块在迷宫中的“坐标位置”  
      int di;              //从此通道块走向下一通道块的“方向”  
    }SElemType;            //栈的元素类型  
status MazePath(MazeType maze,PosType start,PosType end){  
    //若迷宫maze中存在从入口strat到出口end的通道,则求得一条存放在栈中(从栈底到栈顶),并返回TRUE,否则返回FALSE  
        InitStack(S);  
        curpos=start;      //设定“当前位置”为“入口位置”  
        curstep=1;         //探索第一步  
        do{  
              if(pass(curpos)){   //当前位置可以通过,既是未曾走到过的通道块  
                  FootPrint(curpos);   //留下足迹  
                  e=(curstep,curpos,1);      
                  Push(S,e);         //加入路径  
                  if(curpos==end)    //到达终点(出口)  
                    return true;  
                  curpos=NextPos(curpos,1);  //下一位置是当前位置的东邻  
                  curstep++;           //探索下一步  
                }  
              else{       //当前位置不能通过  
                  if(!StackEmpty(S)){  
                      Pop(S,e);  
                      while(e.di==4&&!StackEmpty(S)){  
                         MarkPrint(e.seat);        //留下不能通过的标记  
                         Pop(S,e);                 //并退回一步  
                        }  
                      if(e.di<4){  
                         e.di++;  
                         Push(S,e);     //换下一个方向探索  
                         curpos=NextPos(e.seat,e.di);  
                        }  
                    }  
                }  
            }while(!StackEmpty(S));  
        return (FALSE);  
    }  

该代码功能是进行迷宫求解,优点是时间和空间的复杂度更小

https://blog.csdn.net/williamfan21c/article/details/31817073

5. 代码Git提交记录截图

posted @ 2018-04-14 18:29  ljy1139  阅读(1002)  评论(2编辑  收藏  举报