注册 登录
编程论坛 数据结构与算法

回文程序 哪错啦哪错啦 求解答

a371375284 发布于 2012-03-19 17:58, 409 次点击
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define stack_size 50
#define TRUE 1
#define FALSE 0

typedef struct             //定义一个栈
{
    char elem[stack_size];
    int top;
}SeqStack;

int InitStack(SeqStack *S)         //构造一个顺序栈
{
    S->top=-1;
    return(TRUE);
}

int push(SeqStack *S,char x)         //x进栈
{
    S->top++;
    S->elem[S->top]=x;
    return(TRUE);
}

char pop(SeqStack *S)       //x出栈
{
    char a;
    a=S->elem[S->top];
    S->top--;
    return(a);
}


typedef struct Node                      //定义一个队列
{
    char data;
    struct Node *next;
}LinkQueueNode;

typedef struct
{
    LinkQueueNode *front;
    LinkQueueNode *rear;
}LinkQueue;

int InitQueue(LinkQueue *Q)                //初始化列表
{
    Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
    Q->rear=Q->front;
    Q->front->next=NULL;
    return(TRUE);
}

int EnterQueue(LinkQueue *Q,char x)   //入列
{
    LinkQueueNode *NewNode;
    NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
    NewNode->data=x;
    NewNode->next=NULL;
    Q->rear->next=NewNode;
    Q->rear=NewNode;
    return(TRUE);
}

char DeleteQueue(LinkQueue *Q)        //出列
{
   
    char a;
    LinkQueueNode *p;
    p=Q->front->next;
    Q->front->next=p->next;
    a=p->data;
    free(p);
    return(a);
}


void main()
{
   SeqStack s;
   InitStack(&s);
   LinkQueue Q;
   InitQueue(&Q);
   char str;
   int i=0;
   while(str=getchar()!='@');
   {
       push(&s,str);
       EnterQueue(&Q,str);
       i++;
   }
   while(i>0)
  {
       char str1=pop(&s);
       char str2=DeleteQueue(&Q);

       if(str1!=str2)
       {
           printf("不是回文");
           break;
       }
       i--;
   }
   printf("是回文");
}A
2 回复
#2
C_戴忠意2012-03-20 15:28
我在这方面很菜   学习中
#3
爱德华2012-03-20 18:28
这个回文判断用一个栈不就解决了吗,先存储原数值,将判断数入栈,在出栈与原数值比较
1