user-0 提问: 回文判断

回复:
user: user-0
content: 好的，谢谢指导。

user: user-1
content: 搞复杂了，回文判断只需要一个头指针和尾指针依次判断就好了，为啥还要用栈数据结构？

user: user-2
content: nu@nu-System-Product-Name:~/Code/C++$ ./ab Please input a number: 123321 1, 1 2, 2 3, 3 3, 3 2, 2 1, 1 是回文数  补上测试方法！

user: user-2
content: 问题搞得很复杂呢。单独用栈或者单独用队列都可以完成回文的判定，当然都用也是可以的。  #include<stdio.h> #include<stdlib.h>  typedef struct{     int *base;     int *top;     int stacksize; }stack;  typedef  struct node{     int data;     struct node *next; }node,*queue;  typedef struct{     queue front;     queue rear; }link;  int intstack(stack *s) {     s->base = (int*)malloc(10*sizeof(int));     s->top = s->base;     //s->stacksize=100;     s->stacksize = 10;     return 1; } int gettop(stack *s,int *e) {     if(s->top==s->base)         return -1;     *e = *(s->top-1);      return 0; }  int push(stack *s,int e) {     *s->top++ = e;      return 0; }  int pop(stack *s,int *e) {     *e = *(--s->top);      return 0; } int intqueue(link *q) {     q->front=q->rear=(queue)malloc(sizeof(node));     q->front->next=NULL;      return 0; } int enqueue(link *q,int e) {     queue p=(queue)malloc(sizeof(node));     p->data = e;     p->next=NULL;     q->rear->next = p;     q->rear = p;      return 0; } int getqueue(link *q,int e) {     e = q->front->data;      return e; } int dequeue(link *q,int *e) {     queue p=(queue)malloc(sizeof(node));     p = q->front->next;     *e = p->data;     q->front->next=p->next;     if(q->rear==p) q->rear=q->front;     free(p);      return 0; } int huiwen(char str[]) {  } int main() {     int a,b, m, n;     stack s;     link q;     intstack(&s);     intqueue(&q);      printf("Please input a number: ");     scanf("%d", &a);      while (a) {         b = a % 10;          push(&s, b);         enqueue(&q, b);         a /= 10;     }      while (s.base != s.top && q.front != q.rear) {         pop(&s, &m);         dequeue(&q, &n);         printf("%d, %d\n", m,  n);         if (m != n)             break;     }      if (s.base != s.top)         printf("不是回文数\n");     else if (q.front != q.rear)         printf("不是回文数\n");     else         printf("是回文数\n");   #if 0      printf("输入栈和队列:\n");     scanf("%d", &a);     while(a!=0)     {         push(&s,a);         enqueue(&q,a);         scanf("%d",&a);     }     printf("栈的输出:\n");     while(s.base!=s.top)     {         gettop(&s,&a);         printf("%d",a);         pop(&s,&a);     }     printf("\n");     printf("队列的输出:\n");     while(q.front!=q.rear)     {         dequeue(&q,&a);         printf("%d",a);     }     printf("\n");     printf("输入一串数字:\n");     scanf("%d",&b);     while(!b)     {         push(&s,b);         enqueue(&q,b);     }     while(!b)     {         if(gettop(&s,&b)!=getqueue(&q,b))         {             printf("不是回文数\n");         }     }     printf("是回文数\n"); #endif     return 0; }  供参考！ 栈和队列都用的方式判断回文。

user: user-0
content: 然后我又改成了return *e和return e还是不对

user: user-3
content: 引用 2 楼 Bule蓝 的回复:[quote=引用 1 楼 user-3的回复:]int gettop(stack *s,int *e)；int getqueue(link *q,int e)；你这两个函数都没有返回值，if(gettop(&s,&b)!=getqueue(&q,b))这一句比较的时候是没有那你的数字串来比较的，所以就出错了 不对呀，我加了一个return 1后，也没用呀。[/quote] 不能return 1 呀，你要把栈顶和队首的元素拿出来呀，要不他们比较相不相等的时候拿什么比

user: user-0
content: 引用 1 楼 user-3的回复:int gettop(stack *s,int *e)；int getqueue(link *q,int e)；你这两个函数都没有返回值，if(gettop(&s,&b)!=getqueue(&q,b))这一句比较的时候是没有那你的数字串来比较的，所以就出错了 不对呀，我加了一个return 1后，也没用呀。

user: user-3
content: int gettop(stack *s,int *e)；int getqueue(link *q,int e)；你这两个函数都没有返回值，if(gettop(&s,&b)!=getqueue(&q,b))这一句比较的时候是没有那你的数字串来比较的，所以就出错了