| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 809 人关注过本帖
标题:利用栈判断回文,很简单的要求,可就是弄不出来啊
只看楼主 加入收藏
杨松松
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:142
注 册:2011-12-3
结帖率:91.67%
收藏
已结贴  问题点数:20 回复次数:6 
利用栈判断回文,很简单的要求,可就是弄不出来啊
#include<stdio.h>
#include<stdlib.h>
#define STACK  100
#define  STACKINCREMENT   10
typedef struct{
    char *base;
    char *top;
    int stacksize;
} sqstack;
int initstack(sqstack &s)
{  s.base=(char *)malloc(STACK *sizeof(char));
       if(!s.base) exit(0);
       s.top=s.base;
       s.stacksize=STACK;
       return 1;
}
int push(sqstack &s,char c)
{ if(s.top-s.base>=s.stacksize){
      s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
      if(!s.base)  exit(0);
       s.top=s.base+s.stacksize;
       s.stacksize+=STACKINCREMENT; }
      *s.top++=c;
      return 1;
}

int judge(sqstack &s,sqstack &q)
{   int n;
   
    do
    {   if( (*s.top--)-(*q.top--)!=0)  {n=0;break;}/*请问我这里有啥问题么?*/
            else n=1;
    } while(q.top!=q.base);
    return n;
}
pop(sqstack &s,char e){
     if(s.top==s.base)return 0;
       e=*--s.top;
       return 1;
}
main()
{  sqstack s,q,p;char c;int n;
    initstack (s);
    initstack (q);
    initstack (p);
    printf("put a charity end up with '@'\n");
    while(c!='@')
    { scanf("%c",&c);
       push(s,c);
       push(p,c);
    }
    do
    {pop(p,c);push(q,c);}
       while(p.top!=p.base);
     n=judge(s,q);
    if(n==1) printf("Yes,it is \n");
      if(n==0) printf("No,it is not\n");
}
搜索更多相关主题的帖子: return include top 
2012-10-13 22:06
杨松松
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:142
注 册:2011-12-3
收藏
得分:0 
   怎么没人啊?太简单了?好吧,那我就说说自己的思路,免得大牛们说我不思进取,拿来主义。
   其实思路很简单,建栈、取元素、放元素这样的样板就不说了,说说主要的。为了实现判断回文,我建了三个栈,两个存放相同的元素,另一个作为存储栈存储倒着的元素。然后比较正倒元素是不是一样,由于我这里是char型,因此我用ASC||码来实现判断。一旦有一次不一样,就返回0,说明不是回文。如果都一样,那么就是回文。思路很简单,我就是想请大家看看写法上有啥错误。
 
2012-10-13 22:47
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
pop(sqstack &s,char &e)//引用
2012-10-13 23:38
杨松松
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:142
注 册:2011-12-3
收藏
得分:0 
回复 3楼 寒风中的细雨
哥啊,那确实有点问题,不过还是不能出现正确结果,无论输入的是否是回文,他都显示“no,it is not”。这是为什么啊?
2012-10-14 23:46
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:20 
程序代码:
    1    //bccn.c
     2   
     3    #include <stdio.h>
     4    #include <stdlib.h>
     5    #include <assert.h>
     6   
     7    #define STACK         (100)//
     8    #define INCREMENT    (10)//
     9   
    10    typedef struct
    11    {
    12        char *base;
    13        char *top;
    14        int stack_size;
    15    }sqstack;
    16   
    17    //
    18    void init_stack(sqstack *s)
    19    {
    20        assert(s);
    21        s->base = malloc (STACK * sizeof(char));
    22        if (!s->base)
    23        {
    24            exit(-1);   
    25        }
    26        s->top = s->base;
    27        s->stack_size = STACK;
    28    }
    29   
    30    void push(sqstack *s, char c)
    31    {
    32        assert(s);
    33        if (s->top - s->base >= s->stack_size)
    34        {
    35            s->base = realloc(s->base, (s->stack_size + INCREMENT)*sizeof(char));
    36            if (!s->base)
    37            {
    38                exit(-1);
    39            }
    40            s->top = s->base + s->stack_size;
    41            s->stack_size += INCREMENT;
    42        }
    43        *s->top++ = c;
    44    }
    45   
    46    void pop(sqstack *s)
    47    {
    48        assert(s);
    49        if (s->top != s->base)
    50        {
    51            --s->top;
    52            --s->stack_size;
    53        }
    54    }
    55   
    56    char get_top(sqstack s)
    57    {
    58        if (s.top != s.base)
    59        {
    60            return *(s.top - 1);
    61        }
    62    }
    63   
    64    int is_empty(sqstack s)
    65    {
    66        return (s.top == s.base);
    67    }
    68   
    69    int judge(sqstack s, sqstack q)
    70    {
    71        while (!is_empty(s) && !is_empty(q))
    72        {
    73            if (get_top(s) == get_top(q))
    74            {
    75                pop(&s);
    76                pop(&q);
    77            }
    78            else
    79            {
    80                return 0;
    81            }
    82        }
    83       
    84        return 1;
    85    }
    86   
    87    int main(void)
    88    {
    89        sqstack s, q, p;
    90        char c;
    91        int n;
    92       
    93        init_stack(&s);
    94        init_stack(&q);
    95        init_stack(&p);
    96   
    97        printf ("Enter chars end up with '@'\n");
    98        scanf("%c", &c);
    99        while (c != '@')
   100        {
   101            push(&s, c);
   102            push(&p, c);
   103            scanf("%c", &c);
   104        }
   105       
   106        while (!is_empty(p))
   107        {
   108            push(&q, get_top(p));
   109            pop(&p);
   110        }
   111   
   112        if (judge(s, q))
   113        {
   114            printf ("yes, it is\n");
   115        }
   116        else
   117        {
   118            printf ("no, it isn't\n");
   119        }
   120   
   121        return 0;
   122    }
2012-10-15 13:08
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
./a.out
Enter chars end up with '@'
123@
no, it isn't


./a.out
Enter chars end up with '@'
543212345@
yes, it is
2012-10-15 13:10
杨松松
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:142
注 册:2011-12-3
收藏
得分:0 
回复 6楼 寒风中的细雨
真是太感谢了
2012-10-17 00:03
快速回复:利用栈判断回文,很简单的要求,可就是弄不出来啊
数据加载中...
 
   



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

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