- 采用链式存储实现栈的初始化、入栈、出栈操作。
- 给定一个括号序列,里面包括圆括号和方括号,编程检验该括号序列中括号是否配对
#include<stdio.h> #include<stdlib.h> // Code by Titan 2020-03-16 // 定义堆栈结构 typedef struct Node *Position; typedef Position Stack; struct Node { char ch; Position next; }; //定义初始化堆栈的操作 Stack initS() { Stack S =(Stack)malloc(sizeof(struct Node)); S->next=NULL; return S; } // 判断堆栈是否为空 int isEmpty(Stack S) { if(S->next==NULL) { return 1; } else { return 0; } } // 定义压入堆栈的操作 void Push(char data,Stack S) { Stack Temp = (Stack)malloc(sizeof(struct Node)); Temp->ch=data; Temp->next = S->next; S->next=Temp; } //定义删除栈顶节点并返回的操作 char Pop(Stack S) { if(isEmpty(S)) { return NULL; } else { Stack Temp=S->next; char ch = Temp->ch; S->next=Temp->next; free(Temp); return ch; } } int main() { char temp,get; int flag=1; // 判断括号符是否匹配的标志 Stack S = initS(); // 初始化一个堆栈 // 下面是判断流程 while(scanf("%c",&temp),temp!='\n') { if(temp!=']' && temp !=')') { Push(temp,S); } else if(temp == ')' ) { get = Pop(S); if(get !='(') { flag=0; break; } } else if(temp == ']' ) { get = Pop(S); if(get !='[') { flag=0; break; } } } // 只有当堆栈空以及Flag为1时,才能判断括号符匹配 if(flag && isEmpty(S)){ printf("括号符匹配!\n"); }else{ printf("括号符不匹配!\n"); } }
文章评论