用栈判断括号受否配对
首先先定义一个结构体
struct stack
{
char data;
stack *link;
};
初始化结构栈指针
void InitStack(stack *&L)
{
L = NULL;
}
将一个数据进栈
void stackPush(stack *&L)
{
char ch;
while((ch=getchar()) != '\n')
{
stack *p = new stack; //申请内存
p->data = ch;
p->link = L ;
L=p;
}
}
退栈并返回一个数据 (方便后面的对退栈数据的判断)
char stackPop(stack *&L)
{
char da;
stack* q=L;//保留L此时的结点
da = L->data;
L=L->link;
delete q;//释放结点q
return da;
}
显示函数 (此步骤只是为了方便后面的调试,并无用处)
void displayStack(stack *&L)
{
stack *p=L;
while(p)
{
cout << p->data << " ";
p =p->link;
}
}
下面为主函数
#include <iostream>
struct stack
{
char data;
stack *link;
};
using namespace std;
void InitStack(stack *&L); //初始化栈
void stackPush(stack *&L); //进栈
void displayStack(stack *&L); //显示数据
char stackPop(stack *&L); //出栈
int main()
{
stack *L;
int flag = 0;
char da;
InitStack(L);
stackPush(L);
displayStack(L);
cout << endl;
while (L)
{
da= stackPop(L);
if(da == ')')
flag++;
else if(da =='(')
flag--;
if (flag<0)
break;
}
if (!L && flag == 0)
{
cout << "配对";
}
else
cout << "不配对";
while(1);
return 0;
}
void InitStack(stack *&L)
{
L = NULL;
}
void stackPush(stack *&L)
{
char ch;
while((ch=getchar()) != '\n')
{
stack *p = new stack;
p->data = ch;
p->link = L ;
L=p;
}
}
char stackPop(stack *&L)
{
char da;
stack* q=L;//
da = L->data;
L=L->link;//
delete q;//释放结点q
return da;
}
void displayStack(stack *&L)
{
stack *p=L;
while(p)
{
cout << p->data << " ";
p =p->link;
}
}