1.学习总结
1.1思维导图
1.2学习小结
本周学习的栈和队列都是线性结构他们有很多共同点,也有很多不同点。
相同点:
- 插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。
- 插入操作都是限定在表尾进行。
- 都可以通过顺序结构和链式结构实现。
不同点:
- 删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。
- 顺序栈能够实现多栈空间共享,而顺序队列不能
2.PTA实验作业
题目一:7-1 jmu-字符串是否对称
1.设计思路
输入字符串
将输入的字符串进栈
while(字符串长度){
依次将出栈的字符与输入的字符按顺序比较
如果不相等 循环结束 输出NO;
否则继续循环
}
如果循环正常结束 输出YES;
2. 代码截图
3.PTA提交列表说明
- 这道题没有用到C++中的栈(stack),不然会简便很多。一开始是部分正确,主要是把==写成=了,输入什么都是输出NO或者YES,看了很久很久才发现。
题目二:7-3 表达式转换
1.设计思路
输入字符串str[]
for i=0 to 字符串长度{
判断是否为数字 是就记录下来
{如果数组下一位不是数字或小数点 根据题目输出格式输出数字
如果符号为“(”则进栈
}
{如果符号为“*或/” 栈为空字符便进栈
不为空 若栈头为*或者/ 则先输出栈头再将符号进栈
}
{如果符号为“+或-” 在栈不为空的和栈头为+-*/的情况下 将栈中的符号出栈
然后再将符号进栈
}
{如果符号为“)” 则将栈中的符号全部出栈直到栈头为“(”
再将“(”出栈,}}
while(栈不为空)
输出栈中剩余的符号;
2. 代码截图
3.PTA提交列表说明
- 实在是想不出来了,看网上的和我的代码风格不一样。做了太久做不出来有点厌倦了,然后就不想去想了.....
题目三:7-2 银行业务队列简单模拟
1.设计思路
创建两个队列A和B
奇数的顾客进队列A,偶数数的顾客进队列B
在A或B队列不为空的情况下
A队列出两人
B队列出一人
若A队列不为空 将队列元素出列
若A队列不为空 将队列元素出列
2.代码截图
3.PTA提交列表说明
- 这题因为上面函数题有一道思路差不多的,所以没花多少时间就可以写出来,不过输出问题错了一下
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分
105+97=202
4. 阅读代码(必做,1分)
c++ stl栈stack的成员函数介绍
操作 比较和分配堆栈
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
void main()
{
stack<int> s;
int num;
cout<<"------Test for Stack-------"<<endl;
cout<<"Input number:"<<endl;
while(cin>>num)
{
s.push(num);
}
cout<<"The Stack has "<<s.size()<<" numbers.They are:"<<endl;
while(!s.empty())
{
cout<<s.top()<<" ";
s.pop();
}
cout<<"\nNow the size is "<<s.size()<<endl;
system("Pause");
}
输出结果
C++队列Queue类成员函数如下:
back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
void main()
{
queue<int> q;
int num;
cout<<"------Test for Queue-------"<<endl;
cout<<"Input number:"<<endl;
while(cin>>num)
{
q.push(num);
}
cout<<"Now the Queue has "<<q.size()<<" numbers."<<endl;
cout<<"The first is "<<q.front()<<endl;
cout<<"The last is "<<q.back()<<endl;
cout<<"All numbers:"<<endl;
while(!q.empty())
{
cout<<q.front()<<" ";
q.pop();
}
cout<<"Now the Queue has "<<q.size()<<" numbers."<<endl;
system("Pause");
}
输出结果
- 分享一下c++中stack和queue的用法和使用例子,虽然有点简单,但可以在我们忘记的时候去看看巩固一下
5.代码Git提交记录截图