2、 栈、队列
背景知识:栈和队列的逻辑定义、存储定义和基本操作的实现及应用
目的要求:
- 掌握栈、队列的思想及其存储实现;
- 掌握栈、队列的常见算法的程序实现及应用。
实验内容: - 利用栈和算符优先算法,实现表达式求值。
- 采用顺序存储实现循环队列的初始化、入队、出队和求队列长度的操作。
实验步骤: - 从键盘输入表达式,求值,并显示求值结果;
- 每次入队或出队操作后,显示队列情况和队列长度。
测试数据:
(1)3×6+9-5×(8-3)
(2)循环队列大小为11;d,e,b,g,h入队;两次出队; i,j,k,l,m入队;一次出队; n,o,p,q,r入队
栈实现表达式求值
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int read() {
int x; cin >> x; return x;}
template<typename T> struct stack
{
int top_ = 0;
T *a = 0;
void push(T x) {
top_++;
a = (T *)realloc(a,top_*sizeof(T));
a[top_-1] = x;
}
int size() {
return top_;}
void pop() {
top_--;}
T top() {
return a[top_-1];}
bool empty(){
return top == 0;}
T operator [] (int x){
return a[x];}
};
char map[7]{
'+','-','*','/','(',')','#'};
int mapT[1000];
int cmp[7][7] = {
1,1,-1,-1,-1,1,1,
1,1,-1,-1,-1,1,1,
1,1,1,1,-1,1,1,
1,1,1,1,-1,1,1,
-1,-1,-1,-1,-1,0,999,
1,1,1,1,999,<