主题:[原创]求助:关于栈的问题。(急)
我在编一个判断括号是否配对的顺序栈题目,已经写的程序如下:
#include<malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define LEN 100
#define LEN2 10
typedef struct Stack
{ char *base;
char *top;
int size;
}SqStack;
char e;
char *p;
main()
{ SqStack S;
char ch;
S.base=(char *)malloc(LEN * sizeof(char));
if(!S.base)exit(0);
S.top=S.base;
S.size=LEN;
printf("Please input the char:\n");
ch=getchar();
while(ch!=';')
{ p=S.top;
Push(S,ch);
S.top++;
Test(S,ch);
ch=getchar();
}
p=S.base;
while(p!=S.top) {
printf("%c",*p);
p++ ;
}getch();
exit(0);
}
Push(SqStack S,char e)
{
if(S.top-S.base>=S.size)
{ S.base=(char *)realloc(S.base,(S.size+LEN2) * sizeof(char));
if(!S.base)exit(0);
S.top=S.base+S.size;
S.size+=LEN2;
}
*S.top=e;
}
Pop(SqStack S,char e)
{
if(S.top==S.base)return 0;
e=*--S.top;
printf("%c\n",e);
getch();
}
Cheak(SqStack S)
{ if(S.top==S.base)
{ printf("The stack is empty!\n");
getch();
return OK;
}
else
{ printf("The stack is not empty!\n");
getch();
return 0;
}
}
Test(SqStack S,char e)
{
if((e=='(')||(e==')')||(e=='[')||(e==']'))
{ if((*p=='('&&*S.top==')')||(*p=='['&&*S.top==']'))
{Pop(S,e);
Pop(S,e);}
else ;
}
else
{ Pop(S,e);}
}
我的思路是:将不符合条件的字符出栈,最后栈S中只剩下括号(有几种情况,这时说明不配对)或什么都不剩(说明括号配对)。不过我发现这个程序的Pop()函数好像没管用,最后S中输出的是所有的入栈元素。麻烦大家帮我找一下怎么回事??
#include<malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define LEN 100
#define LEN2 10
typedef struct Stack
{ char *base;
char *top;
int size;
}SqStack;
char e;
char *p;
main()
{ SqStack S;
char ch;
S.base=(char *)malloc(LEN * sizeof(char));
if(!S.base)exit(0);
S.top=S.base;
S.size=LEN;
printf("Please input the char:\n");
ch=getchar();
while(ch!=';')
{ p=S.top;
Push(S,ch);
S.top++;
Test(S,ch);
ch=getchar();
}
p=S.base;
while(p!=S.top) {
printf("%c",*p);
p++ ;
}getch();
exit(0);
}
Push(SqStack S,char e)
{
if(S.top-S.base>=S.size)
{ S.base=(char *)realloc(S.base,(S.size+LEN2) * sizeof(char));
if(!S.base)exit(0);
S.top=S.base+S.size;
S.size+=LEN2;
}
*S.top=e;
}
Pop(SqStack S,char e)
{
if(S.top==S.base)return 0;
e=*--S.top;
printf("%c\n",e);
getch();
}
Cheak(SqStack S)
{ if(S.top==S.base)
{ printf("The stack is empty!\n");
getch();
return OK;
}
else
{ printf("The stack is not empty!\n");
getch();
return 0;
}
}
Test(SqStack S,char e)
{
if((e=='(')||(e==')')||(e=='[')||(e==']'))
{ if((*p=='('&&*S.top==')')||(*p=='['&&*S.top==']'))
{Pop(S,e);
Pop(S,e);}
else ;
}
else
{ Pop(S,e);}
}
我的思路是:将不符合条件的字符出栈,最后栈S中只剩下括号(有几种情况,这时说明不配对)或什么都不剩(说明括号配对)。不过我发现这个程序的Pop()函数好像没管用,最后S中输出的是所有的入栈元素。麻烦大家帮我找一下怎么回事??