编程c语言-关于数据结构括号匹配的问题

问题描述

关于数据结构括号匹配的问题

程序写完了,但是一运行就崩了,我不知道错误在哪,求大神指教!下面贴出我的代码:
#include
#include
#include
using namespace std;

#define SIZE 100

typedef struct StackNode{
char data;
struct StackNode *next;
}StackNode,*LinkStack;

void InitStack(LinkStack &S);
void Push(LinkStack &S,char e);
void Pop(LinkStack &S,char &e);
bool StackEmpty(LinkStack &S);
char GetTop(LinkStack &S);
void Matching(char Carray[]);

void mud(LinkStack &S,char Carray[]);

void main(){
LinkStack S;
char Carray[SIZE];
cout<<"请输入一串括号并以#号结束:";
gets(Carray);
puts(Carray);
Matching(Carray);
// if(!StackEmpty(S)) cout<<"栈已空";
//else cout<<"未空";

}

void InitStack(LinkStack &S){
//构造一个空栈
S=NULL;
}

void Push(LinkStack &S,char e){
//压入栈
LinkStack p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
}

void Pop(LinkStack &S,char &e){
//弹出栈
LinkStack p;
if(S==NULL){
printf("该栈已空n");
exit(1);
}
p=S;
e=S->data;
S=S->next;
delete p;
}

bool StackEmpty(LinkStack &S){
//判断栈是否已空
if(S==NULL) return true;
else return false;
}

char GetTop(LinkStack &S){
//返回桟顶元素
return S->data;
}

void Matching(char Carray[]){
char x;
int flag=1,i=0;
LinkStack S;
InitStack(S);
while(Carray[i]!='#'&&flag){
switch(Carray[i]){
case '[' || '(':
Push(S,Carray[i]);
break;
case ']':
x=GetTop(S);
if(x=='[') Pop(S,x);
else flag=0;
break;
case ')':
x=GetTop(S);
if(x=='(') Pop(S,x);
else flag=0;
break;
}
i++;
}
if(!StackEmpty(S)&& flag) cout<<"括号匹配";
else cout<<"括号不匹配";

}

解决方案

设置断点,单步调试跟踪一下

时间: 2024-10-27 23:20:23

编程c语言-关于数据结构括号匹配的问题的相关文章

c语言-C/C++ 简单括号匹配问题

问题描述 C/C++ 简单括号匹配问题 我的程序,运行检测的括号匹配和实际不符麻烦帮忙看下问题 #include<stdio.h> typedef struct { char ch[50]; int top; }SeqStack; int Push(SeqStack &S,char x) { if(S.top==49) return 0; S.top++; S.ch[S.top]=x; return 1; } int Pop(SeqStack &S,char x) { if(S

编程和语言之我见

我觉得"编程"的概念相当宽泛,程序早在计算机出现之前就存在.我们现在进机关办事,仍不时会听到"做事要按程序/规矩/规 章制度来".比如我们学生项目基金报销,要按先后顺序依次执行"填报销单.交团总支审核.院长助理签字.财务处复查"等步骤.而这些就是所谓的"程序". 因此,程序就是为达到某个目标而需要执行的步骤:而如何把这些步骤有意义地组合起来,这个过程就是"编程". 用这个定义去匹配,会发现周边很多事情都是编

括号匹配问题之Java,哪错了?

问题描述 括号匹配问题:描述现在,有一行括号序列,请你检查这行括号是否配对.输入第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No解题

代码-C/C++ 用顺序表实现的括号匹配问题

问题描述 C/C++ 用顺序表实现的括号匹配问题 我的代码 #include<stdio.h> #include<string.h> #define TRUE 1 #define FALSE 0 typedef struct { char data[100]; int top; }Stack; int InitStack(Stack stack) { stack.top=-1; return TRUE; } int Push(Stack &stackchar &ch

用C语言描述数据结构

学好计算机,主要要从三个方面做起,其中,第一步就是要学好各种语言,这是第一步,对各种语言有一个大体的了解;然后就是数据结构了,它是计算机中的一门核心的课程,也是一门信息计算;在最后本人认为就是算法了,它也是这三部中最难得一步了,要学好计算机,做一名优秀的程序元,这三步是最基本的,然后再是在他们的基础上层层深入. 在过去的一年之中,我对计算机的语言有了一个大体的了解,在前一段时间,我自学了数据结构,下面,谈谈我自学的数据结构的看法,在接下来一段有人指点的时间里,再来纠正以前对数据结构的错误看法.

九度题目1153:括号匹配问题

题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2965 解决:1315 题目描述:     在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右 边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号.不能匹配的 左括号用"$"标注,不能匹配的右括号用"?"标注. 输入:     输入包括多组数据,

关于如何把c语言的数据结构改成c语言疏忽

问题描述 关于如何把c语言的数据结构改成c语言疏忽 引用标志符(&)在C里不支持,那应该怎么改才能在c里使用Status InitList_Sq( SqList &L ) 解决方案 数据结构之希尔排序(C语言)c语言数据结构之链表 解决方案二: Status InitList_Sq( SqList *L ) 解决方案三: 如果SqList是一个指针,那么L就是指针的指针,改变这个指针的值,就可以在内外传值

数据结构 算法 书籍-c语言学习数据结构和算法有什么好书推荐吗?

问题描述 c语言学习数据结构和算法有什么好书推荐吗? c语言学习数据结构和算法有什么好书推荐吗? 求大神告知一下,谢谢了 解决方案 学习数据结构的好书哪位大哥介绍几本好书? 关于学习数据结构与算法的书 解决方案二: 刘汝佳的算法竞技入门经典,白色的 解决方案三: 数据结构 http://wenku.baidu.com/link?url=aFQ-ayTp5v3G0VJS1RXFfa-1a4cSm3TwUWD22pDUFqp6vX7CvSuepfFgePJnO8ZJcxMItGpbA3Y5KZthc

OpenJudge一类括号匹配问题

问题描述 OpenJudge一类括号匹配问题 总时间限制: 1000ms 内存限制: 65536kB 描述 在程序设计中,常常使用小括号强调表达式的运算顺序,但是,左右小括号必须匹配.现给定一个不多于500个符号的表达式(串),其中可能存在多个小括号,想检查小括号的匹配问题.如果存在小括号不匹配,则输出 mismatch:如果所有小括号匹配,则按左右括号的匹配距离由小到大输出左.右括号的位置:若多个匹配的距离相等,则左括号先出现的匹配先输出:如果整个串中没有小括号,则左右位置均输出0,即 0,0