总结

今天复习了队列和栈

例题:后缀表达式求值

栈是一种先入先出的数据结构

栈的声明及部分函数:

#include<stack>
stack<int> stk;  // 创建int类型栈,名字为stk
stk.push(x)      // 把x压栈
stk.pop()        // 弹出栈顶元素
stk.top()        // 查看栈顶元素
stk.size()       // 返回栈内元素个数
stk.empty()      // 返回栈是否为空

做了一道题:

后缀表达式求值

  • 学会了isdigit函数:isdigit()函数用于判断字符是否为数字(0-9)。
  • 函数说明:判断参数c是否为数字,参数c是整数类型(在 C / C++中字符可以当作整数来处理)。
  • 返回值:若参数c为阿拉伯数字 0-9,则返回非 0 值(通常为 1),否则返回 0。

在写程序中我遇到了几个问题

  1. 没有弄清字符串的长度,以为终止符也算字符串。
  2. x--和--x用反了,一个是先算再用一个是先用再算
  3. 还有一个是后缀表达式转前缀表达式的减法和除法的被减数和被除数弄反了。
#include<bits/stdc++.h>
using namespace std;
int a[260],h;
int main()
{
	string s;
	getline(cin,s,'@');
	int len=s.size();
	for(int i=0;i<len;i++)
	{
		if(isdigit(s[i])==1)
		{
			int num=0;
			while(isdigit(s[i])==1)
			{
				num=num*10+s[i]-'0';
				i++;
			}
			i--;
			a[++h]=num;
		} 
		else if(s[i]!=' ')
		{
			int r=a[h],t=a[--h],x=0;
			if(s[i]=='+')
			{
				x=r+t;
			}
			else if(s[i]=='-')
			{
				x=t-r;
			}
			else if(s[i]=='/')
			{
				x=t/r;
			}
			else
			{
				x=r*t;
			}
			a[h]=x;
		}
	}
	cout<<a[1];
return 0;
}

队列

队列是一种先入先出的数据结构

队列的声明及部分函数

#include<queue>
queue<int> q;
q.push(x);  // 队尾插入x
q.pop();    // 弹出队头
q.front();  // 查看队头
q.back();   // 查看队尾
q.size();   // 查看q元素个数
q.empty();  // 查看q是否为空