请教各位学数据结构的高手,我编了个回文判断的程序,可运行的时候总是出现错误?
这让我很郁闷,谁能帮我改一下?
还有怎么才能解决这样一个问题:为什么上课老师讲的能听懂,自己遍的时候却编不出来呢?
望大家给点指导建议,本人将不胜感激!
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define MAX 100
struct Sqstack
{
char *base;
char *top;
int stacksize;
};
typedef struct QNODE{
char data;
struct QNODE *next;
}QNODE,*Queueptr;
typedef struct Queue{
Queueptr front;
Queueptr rear;
}LinkQueue;
int InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNODE[STACK_INIT_SIZE];
if(!Q.front)
return -1;
Q.front->next=NULL;
}
int DeQueue(LinkQueue &Q,char &e)
{
Queueptr p;
if(Q.front==Q.rear)
p=Q.front->next;
return -1;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
}
int EnQueue(LinkQueue &Q,char e)
{
Queueptr p=new QNODE;
if(!p) return -1;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
void Init_stack(Sqstack &s)
{
s.base=new char[STACK_INIT_SIZE];
if(!s.base) exit(-1);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
}
int push_stack(Sqstack &s,char ch)
{
if(s.top-s.base>=s.stacksize)
return -1;
*s.top++=ch;
return 0;
}
int pop_stack(Sqstack &s,char &ch)
{
if(s.top==s.base)
return -1;
ch=*--s.top;
return 0;
}
int empty_stack(Sqstack &s)
{
if(s.top==s.base)
return 0;
else
return 1;
}
void main()
{
int i,n=0;
char a_1[MAX],a_2[MAX],a[MAX];
char ch,ch_1,ch_2;
Sqstack s;
Queue Q;
Init_stack(s);
for(i=0;(i<100)&&((a[i]=getchar())!='\n');++i);
for(n=0;n<i;n++)
{
push_stack(s,a[n]);
EnQueue(Q,a[n]);
}
//for(n=0;n<i;n++)
while(!empty_stack(s))
{
pop_stack(s,ch_1);
DeQueue(Q,ch_2);
if(ch_1!=ch_2)
break;
cout<<"string is huiwen";
else
cout<<"string isn't huiwen;"
}
cout<<"ERROR";
}