假设表达式中允许包含3中括号:圆括号、中括号和大括号。设计一个算法采用“顺序栈”判断表达式中的括号是

时间:2022-08-01 17:47:31 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

//假设表达式中允许包含3中括号:圆括号、中括号和大括号。设计一个算法采用“顺序栈”判断表达式中的括号是否正确配对

#include <iostream>

#include <string>

#include <stdlib.h>

using namespace std;

class stack{

private:

int max;

int top;

char *str; //存放栈元素的数组

public:

stack(int size)

{

max=size;

top=-1;

str=new char[max];

}

stack()

{

top=-1;

}

~stack()

{

delete []str;

}

void clear(){

top=-1;

}

bool push(const char item) //入栈操作

{

if(top==max-1)

{

cout<<"栈满溢出"<<endl;

return false;

}

else

{

str[++top]=item;

return true;

}

}

bool pop(char &item)

{

if(top==-1)

{

cout <<"栈为空,不能进行删除操作"<<endl;

return false;

}

else

{

item=str[top--];

return true;

}

}

bool empty(){

if(top==-1)

return true;

else

return false;

}

};

int main()

{

char c;

string st;

int d=1,j=1;

stack a(25);

while(j){

cout << "请输入表达式:";

cin >> st;

for(int i=0;st[i]!='\0'&&d==1;i++){

switch(st[i]){

case'(':

case'[':

case'{':

a.push(st[i]);

break;

case')':

a.pop(c);

if(c=='(')

break;

else{

d=0;

break;

}

case']':

a.pop(c);

if(c=='[')

break;

else{

d=0;

break;

}

case'}':

a.pop(c);

if(c=='{')

break;

else{

d=0;

break;

}

}

}

if(a.empty()&&d==1)

cout << "配对正确!!" << endl;

else

cout << "配对错误!!" << endl;

cout<<" *****************"<<endl;

cout<<" * 1、继续!! *"<< endl;

cout<<" * 2、退出!! *"<<endl;

cout<<" *****************"<<endl;

cout<<" 请选择.....";

cin >>j;

if(j==2)

j=0;

if(j==1){

system("cls");

a.clear();

}

}

system("cls");

cout << "程序结束!!" << endl;

return 0;

}

本文来源:https://www.wddqw.com/doc/73b666c29a8fcc22bcd126fff705cc1755275fed.html