注册 登录
编程论坛 C++教室

请教一下这道题目,大家给小生看看吧

shaobin188 发布于 2011-10-13 15:34, 750 次点击
题目是:假设称正读反读都相同的字符序列为回文。例如,‘abba’,‘abcba’都是回文, ‘ababab’不是回文,试编写程序判别从标准输入读入的以’@’为结束符的字符序列是否是回文。


这道题用栈和队列做应该会比较简单,所以我想用链表来做一下,用双向循环链表应该也很简单,但是貌似我链表建错了,刚学,不明白了,求指教
#include "stdafx.h"
#include "stdlib.h"
typedef char dataype;
typedef struct dnode
{
    dataype data;
    struct dnode *prior,*next;
}dlinklist;
void main(int argc, char* argv[])
{dlinklist *head,*s,*a,*p,*q;
int i=1;
head=(dlinklist*)malloc(sizeof(dlinklist));
a=head;
char ch;
printf("input data:\n");
ch=getchar();                 
while(ch!='@')                 
{
    s=(dlinklist*)malloc(sizeof(dlinklist));
    s->data=ch;
    a->next=s->prior;
    s->next=head;
    a=s;
    ch=getchar();
    i++;

}
s->next=head;
p=head->next;
q=head->prior;
if(i%2==0)
{ while (p->data==q->data)
    {
          p=p->next;
          q=q->prior;
          if(p->next=q)
          {
          printf("×?·?DòáD?a????");
          break;
          }




    }
   printf("×?·?DòáD2?ê?????");
}

else
{
while (p->data==q->data)
    {
          p=p->next;
          q=q->prior;
          if(p->next=q->prior)
          {
          printf("×?·?DòáD?a????");
          break;}
}
printf("×?·?DòáD2?ê?????");


}
}
5 回复
#2
丞相杀手2011-10-13 17:33
判断回文应该用的数据结构是栈或队列……
#3
shaobin1882011-10-13 18:03
我知道,但是我觉得用双向循环链表也是能够做的,head的next与prior相比较判断后,next的next再与prior的prior比较,我觉得思路应该是对的,然后程序应该有错,特别是建立的双向循环链表,应为运行后输入数据后显示内存错误
#4
丞相杀手2011-10-14 12:21
先用循环链表写一个简单的程序

把程序的结构理清楚

再梳理一下思路
#5
shaobin1882011-10-16 22:21
回复 4楼 丞相杀手
说实话我不会写双向循环链表,老师没说过,书上也没写出来过,所以想来问问,双向循环链表怎么建立的
#6
jcw081201102011-10-17 10:14
你可以使用带尾指针的双向循环列表;来判断回文; 很简单啊 个人感觉比队列好多了! 又快~ 就是空间使用率不高! 不过对于现在的计算机来说;空间一般不是问题@
1