博客作业03--栈和队列

1.学习总结(2分)

1.1 写出你认为本周学习中比较重要的知识点关键词,如逻辑结构、栈、队列、存储结构等。

顺序栈,链栈,环形队列,顺序队列,kmp算法。

1.2 使用思维导图将这些关键词组织起来。

2.PTA实验作业(4分)

2.1.1 题目1:字符串是否对称

2.1.2 设计思路(伪代码或流程图)

定义结构体
	定义指针data存储数据
	定义top指向栈的顶部
定义数组ch[90]存储字符,e用于存放出栈元素 
	for i=0 to ch[i] = 0
	将ch[i]内的元素存入栈内
	end for
	for i =0 直到 s -> top为止
	比较出栈的元素与栈底的元素是否相等
	不等就退出循环输出no,循环结束后输出yes 
	end for

2.1.3 代码截图

2.1.4 PTA提交列表说明。


本题用scanf导致多次段错误,但是在devc上可以运行,后来换了get函数后才答案正确

2.2.1 题目2; 报数游戏

2.2.2 设计思路

输入count1表示报的数,输入n表示人数
     for i=0 to i<n
     按顺序将1到n个数字入队
     for(;;)
     遍历队列,同时用count记录当前报的数,
     若符合输入的数则出队且输出,否则插入队尾
     直到最后一个数时,输出该数且结束循环
若报的数大于队列人数则输出错误提示 

2.2.3 代码截图

2.2.4 PTA提交列表说明。


无明显错误,只是忘记用c++编译器了。

2.3.1 题目3银行业务队列简单模拟

2.3.2 设计思路

用队列函数定义队列a和队列b
定义n代表队列长度,num表示顾客的编号
输入顾客数n 
    for i = 0 to n
    将顾客的编号存入队列,偶数存入b,奇数存入a
    end for
    while(!p.empty()&&(!q.empty()))
    输出出队a 2次,再输出出队b 1次
    若a队列或者b队列为空,则输出不为空队列的剩下数据

2.3.3


2.3.4 PTA提交列表说明


循环结束判定条件不正确,导致多次运行超时,同时未考虑到n为0时的情况

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

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:180

4. 阅读代码(必做,1分)

#include"head.h"  
  
void main()  
{  
    SqStack s;  
    char ch, c;  
    InitStack(&s);  
    printf("请输入字符文件,以ctrl+z键表示结束输入:\n");  
    ch = getchar();  
    while (ch != EOF)  
    {  
        //处理一行数据  
        while (ch != EOF && ch != '\n')  
        {  
            switch (ch)  
            {  
            case '#':  Pop(&s, &c); break;  
            case '@':  ClearStack(&s); break;  
            default:  Push(&s, ch); break;  
            }  
            //处理下一行数据  
            ch = getchar();  
        }  
        StackTraverse(s);  
        ClearStack(&s);  
        if (ch!=EOF)  
            ch = getchar();  
    }  
    DestoryStack(&s);  
  
    system("pause");  
}

该代码可进行行编辑,‘#’可以退掉前一个字符,‘@’可以退掉前行的字符,该代码以ctrl z代表结束,
用switch对字符进行判断,出现“#”则出栈,否则用 ClearStack(&s)函数清空栈,其余字符存入栈中。

5. 代码Git提交记录截图

posted on 2018-04-14 20:51  FaceTheWind  阅读(145)  评论(3编辑  收藏  举报

导航