用栈判断括号是否配对

it2023-06-30  69

用栈判断括号受否配对

首先先定义一个结构体

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; } }
最新回复(0)