利用栈检验算术表达式中括号是否配对,输入错误的表达式时输出是正确的
请帮忙看下哪里有问题#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define StackSize 100
typedef char DataType;
typedef struct
{ DataType data;
int top;
}SeqStack;
void main()
{
SeqStack S;
char exp;
char ch;
bool status;
int i;
void InitStack(SeqStack *S);
bool StackEmpty(SeqStack S);
void Push(SeqStack *S, DataType newelem);
DataType Pop(SeqStack *S);
void PrintStack(SeqStack S);
cout<<"输入要检验括号匹配的表达式:"<<endl;
cin>>exp;
InitStack(&S);
status=true;
i=0;
ch=exp;
i++;
while ((ch!='\0') && status) //回车换行符
{
switch (ch)
{
case '(':
Push(&S,ch);
break;
case ')':
if (Pop(&S)!='(')
status=false;
break;
}
ch=exp;
i++;
}
if (StackEmpty(S) && status)
cout<<"表达式正确!"<<endl;
else
{
cout<<"表达式不正确!"<<endl;
cout<<"第"<<i<<"字符开始不正确!"<<endl;
}
system("pause");
}
void InitStack(SeqStack *S)
{
S->top=-1;
}
bool StackEmpty(SeqStack S)
{
if (S.top==-1)
return true;
else
return false;
}
void Push(SeqStack *S, DataType newelem)
{
S->top++;
S->data=newelem;
}
DataType Pop(SeqStack *S)
{
S->top--;
return S->data;
}
qw30716 发表于 2014-4-20 22:52 static/image/common/back.gif
#include
#include
#include
为什么要用链栈?徒增麻烦
既然用了链栈为什么直接将指针++(->next)
用链栈得用双向吧。不然怎么POP(除非从头索引,找到next的下一个为top的位置)
还有就是没申请空间你怎么入栈
我感觉连基本的栈操作都是不对的。还没看main 这个程序编译没问题啊! 青玄 发表于 2014-4-20 21:17 static/image/common/back.gif
这个程序编译没问题啊!
我发错了程序,不是这个 青玄 发表于 2014-4-20 21:17 static/image/common/back.gif
这个程序编译没问题啊!
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#include <iostream>
using namespace std;
typedef struct Node
{ int data;
struct Node *next;
}NODE , *PNODE;
typedef struct Stack
{
PNODE ptop;
PNODE pbottom;
}STACK,*PSTACK;
void InitStack(PSTACKPS);
bool StackEmpty(PSTACKPS);
void Push(PSTACKPS, char newelem);
char Pop(PSTACKPS);
void PrintStack(STACKS);
void main()
{
STACKS;
char exp;
char ch;
bool status;
int i;
cout<<"输入要检验括号匹配的表达式:"<<endl;
cin>>exp;
InitStack(&S);
status=true;
i=0;
ch=exp;
i++;
while ((ch!='\0') && status) //回车换行符
{
switch (ch)
{
case '(':
Push(&S,ch);
break;
case ')':
if (Pop(&S)!='(')
status=false;
break;
}
ch=exp;
i++;
}
if (StackEmpty(&S) && status)
cout<<"表达式正确!"<<endl;
else
{
cout<<"表达式不正确!"<<endl;
cout<<"第"<<i<<"字符开始不正确!"<<endl;
}
system("pause");
}
void InitStack(PSTACKS)
{
S->ptop=NULL;
}
bool StackEmpty(PSTACKS)
{
if (S->ptop==NULL)
return true;
else
return false;
}
void Push(PSTACKS, char newelem)
{
S->ptop++;
S->ptop->data=newelem;
}
char Pop(PSTACKS)
{
S->ptop--;
return S->pbottom;
}
页:
[1]