| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3606 人关注过本帖
标题:回文判断程序
只看楼主 加入收藏
superstar136
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-10-8
收藏
 问题点数:0 回复次数:6 
回文判断程序

请教各位学数据结构的高手,我编了个回文判断的程序,可运行的时候总是出现错误?
这让我很郁闷,谁能帮我改一下?
还有怎么才能解决这样一个问题:为什么上课老师讲的能听懂,自己遍的时候却编不出来呢?
望大家给点指导建议,本人将不胜感激!
#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";
}

搜索更多相关主题的帖子: 回文 判断 
2007-10-13 15:29
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
代码好长啊,实在懒得看呵。。。这是我看到的做回文的最长的程序了。。。没那么复杂的

努力成为菜鸟!
2007-10-13 16:59
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

楼主这个既有堆栈,又有队列,是学习还可以,但实际上一般都用递归判断一个字符串是否是回文序列
bool CheckPalindrome(char str[])
{/*判断字符串是否为回文序列*/
int len;
len=strlen(str);
if(len<=1)
return TRUE;
else
{
return(str[0]==str[len-1]&&CheckPalindrome(str+1,len-2));
}
}


英者自知,雄者自胜
2007-10-13 20:33
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 

哇,好强呀,是用队列和栈判断回文呀,恩,好

2007-10-13 21:01
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 

杀鸡用牛刀,还是两把


从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-13 21:04
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
呵呵,一个回文用到这些还真不简单.
其实只要两个指针,一前一后往中间扫描即可.

倚天照海花无数,流水高山心自知。
2007-10-14 13:59
ondy
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-9-4
收藏
得分:0 
[CODE]

for(;strat<=end;strat++,end--)
{
if(*start!=*end)
{
flog=0;
break;
}
if(flog==1)
{
printf("是回文");
}
else
printf("啥都不是");
}

[/CODE]

2007-10-16 10:45
快速回复:回文判断程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016888 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved