首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看似用了野指针,找不到啊 调试不太擅长

2013-12-02 
貌似用了野指针,找不到啊调试不太擅长假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是

貌似用了野指针,找不到啊 调试不太擅长
假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文。试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。编程实现该程序。要求实现下列函数:
(1) 实现栈、队列的各个基本操作函数;
(2) Pal( )函数实现回文的判断;
(3) main( )函数进行调用。
[实现提示]
输入:需要进行判断的字符序列
输出:回文判断结果
注:队列必需用循环队列实现。
看似用了野指针,找不到啊  调试不太擅长

#include"stdio.h"
#include"stdlib.h"
#define INITSTACKSIZE 50
#define  QUEUEMAXSIZE 50
#define  INCREMENTSIZE 10
typedef struct 
{
char *top;
char *base;
int stacksize;
}Stack;
typedef struct 
{
char *qbase;
int front;
int rear;
}Queue;
void InitStack(Stack &J)
{
J.base=(char*)malloc(INITSTACKSIZE*sizeof(char));
if(!J.base)
exit(-1);
J.top=J.base;
J.stacksize=INITSTACKSIZE;
}
void DestoryStack(Stack &J)
{
free(J.base);
J.base=NULL;
J.top=NULL;
J.stacksize=0;
}
int StackEmpty(Stack J)
{
if(J.base==J.top)
return 1;
else 
return 0;
}
void Push(Stack &J,char &e)
{
if(J.top>=J.base)
J.base=(char*)realloc(J.base,(INITSTACKSIZE+INCREMENTSIZE)*sizeof(char));
if(!J.base)
exit(-1);
J.top=J.base+J.stacksize;
J.stacksize+=INCREMENTSIZE;
*(J.top)++=e;
}
void Pop(Stack &J, char e)
{
if(StackEmpty(J))
exit(-1);
e=*--J.top;
}
void InitQueue(Queue &K)
{
K.qbase=(char*)malloc(QUEUEMAXSIZE*sizeof(char));
K.front=K.rear=0;
}
void DestoryQueue(Queue &K)
{
if(K.front==K.rear)
exit(-1);
free(K.qbase);
K.qbase=NULL;
K.front=K.rear=0;
}
int QueueEmpty(Queue K)
{
if(K.front==K.rear)
return 1;
else 
return 0;
}
void EnQueue(Queue &K,char f)
{
if((K.rear+1)%QUEUEMAXSIZE==0)
exit(-1);
K.qbase[K.rear]=f;
K.rear=(K.rear+1)%QUEUEMAXSIZE;
}
void DeQueue(Queue &K,char f)
{
if(K.front==K.rear)
exit(-1);
f=K.qbase[K.front];
K.front=(K.front+1)%QUEUEMAXSIZE;
}

void Puen(Stack &J,Queue &K,char *r)
{
while((*r)!='@')
{
Push(J,*r);
EnQueue(K,*r);
r++;
}
}
void Pal(Stack &J,Queue &K)
{
while(*(J.top-1)==(K.qbase[K.front]))
{
Pop(J,*(J.top-1));
DeQueue(K,(K.qbase[K.front]));
}
if(StackEmpty(J)&& QueueEmpty(K))
printf("您输入的字符数列是回文数列!\n");
else
printf("您输入的字符数列不是回文数列!\n");
}

int main()
{
char a[50];
Stack s;
Queue q;
printf("请输入字符序列以‘@’加上回车结束:\n");
gets(a);
printf("您输入的字符数列为:\n");
puts(a);
InitStack(s);
InitQueue(q);
Puen(s,q,a);
Pal(s,q);
DestoryStack(s);
DestoryQueue(q);
return 0;
}
数据结构 栈·队列
[解决办法]

for(int i = 0; i < n / 2; ++i)
{
    if(s[i] != s[n - 1 - i])
    {
        return false;
    }
}
return true
直接比较就行了,用栈是个什么情况
[解决办法]
引用:

for(int i = 0; i < n / 2; ++i)
{
    if(s[i] != s[n - 1 - i])
    {
        return false;
    }
}
return true
直接比较就行了,用栈是个什么情况

没看最后一个条件,我错了,请无视
[解决办法]
调试啊,看调用堆栈
[解决办法]

void Push(Stack &J,char &e) //这里出现错误,自己调试跟踪吧

[解决办法]
呐,编程呢,最重要的就是调试,如果你不会调试
那就学习如何调试。
呐,调试呢,最重要的就是跟踪,如果你不会跟踪
那就学习如何按F9 F10 F11

热点排行