您的位置:首页 > 理论基础 > 数据结构算法

【数据结构基础】判别给定的表达式所含括号是否正确配对出现的算法。

2017-04-10 00:30 417 查看
描述:

假设一个算术表达式中可包含三种括号:圆括号()、方括号[]以及花括号{},且这三种括号可以按任意的次序相互嵌套使用。试编写判别给定的表达式所含括号是否正确配对出现的算法。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)
typedef struct node {
char c;
struct node *next;
}Seqstack,*PSeqstack;

typedef struct {
PSeqstack top;
}Linkstack,*Plinkstack;

//初始化空栈
Plinkstack Init_Stack(void){
Plinkstack S;
S = (Plinkstack)malloc(sizeof(Linkstack));
if (S) {
S->top = NULL;
}
return S;
}
//判断栈是否为空
int Is_empty(Plinkstack S) {
if (S->top == NULL) {
return 0;
}
else {
return 1;
}
}

//入栈
void Push_Stack(Plinkstack S,char c) {
PSeqstack p = (PSeqstack)malloc(sizeof(Seqstack));
p->c = c;
p->next = S->top;
S->top = p;
}
//出栈
void Pop_Stack(Plinkstack S) {
if (!Is_empty(S)) {
printf("栈为空,不可以出栈");
}
else {
S->top = S->top->next;
}
}
//得到栈顶元素
char GetTopStack(Plinkstack S) {
return S->top->c;
}

//打印栈
void Print_Stack(Plinkstack S) {
while (S->top) {
printf("%c", S->top->c);
S->top = S->top->next;
}
}

int main(void) {
char s;
Plinkstack S;
S = Init_Stack();
s = getchar();
if (s == ')' || s == ']' || s == '}') {
printf("输入非法");
return 0;
}
else {
while (s!='\n') {
if (s == '(' || s == '[' || s == '{') {
Push_Stack(S, s);
s = getchar();
}
else {
if(s==')'){
if (GetTopStack(S) == '(') Pop_Stack(S);
else Push_Stack(S, s);
s = getchar();
}
else {
if (s == ']') {
if (GetTopStack(S) == '[') Pop_Stack(S);
else Push_Stack(S, s);
s = getchar();
}
else {
if (s == '}') {
if (GetTopStack(S) == '{') Pop_Stack(S);
else Push_Stack(S, s);
s = getchar();
}
}
}
}
}
}
if (!Is_empty(S)) {
printf("输入合法");
}
else {
printf("输入非法");
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构
相关文章推荐