标题:新手求教栈的逆转 看下我的代码为什么不能运行 该如何改 才能使这个栈逆转输 ...
只看楼主
莫问出处
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-19
结帖率:100%
已结贴  问题点数:20 回复次数:4 
新手求教栈的逆转 看下我的代码为什么不能运行 该如何改 才能使这个栈逆转输出
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 1024

typedef int datatype;
typedef struct
{
    datatype data[MAXSIZE];
    int top;
}SeqStack;
SeqStack *Init_SqeStack()
{
    SeqStack *s;
    s=(SeqStack*)malloc(sizeof(SeqStack));
    s->top=-1;
    return s;
}
int StackEmpty(SeqStack *s)
{
    if(s->top==-1)
        return 1;
    else return 0;
}
int Push(SeqStack *s,datatype x)
{
    if(s->top==MAXSIZE-1) return 0;
    else
    {s->top++;
    s->data[s->top]=x;
    return 1;
    }
}
int Pop(SeqStack *s,datatype *x)
{
    if(StackEmpty(s)) return 0;
    else{*x=s->data[s->top];
    s->top--;
    return 1;
    }
}
void main( SeqStack *s )
{
    SeqStack *s1, *s2;
    datatype x;

   

    //将s栈中的内容转移到s1栈中
    while( ( s ) != 0 )
    {
        Pop( s, &x );
        Push( s1, x );
    }

    //将s1栈中的内容转移到s2栈中
    while( StackEmpty( s1 ) != 0 )
    {
        Pop( s1, &x );
        Push( s2, x );
    }

    //将s2栈中的内容转移到s栈中
    while( StackEmpty( s2 ) != 0)
    {
        Pop( s2, &x );
        Push( s, x );
    }
}
搜索更多相关主题的帖子: include 如何 top return 
2012-09-19 19:33
xtjopt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:168
注 册:2012-9-12
得分:0 
啊 比你更新 ,我连指针都还不懂 哈哈
2012-09-19 19:41
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
得分:0 
void main( SeqStack *s )   这是你主函数吗,那参数可以这样吗
2012-09-23 19:04
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3450
专家分:19340
注 册:2012-3-31
得分:0 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-09-23 19:14
wtw199186
Rank: 2
等 级:论坛游民
帖 子:55
专家分:78
注 册:2012-9-22
得分:20 
#include <stdio.h>
 #include <stdlib.h>
 #include <malloc.h>
 #define MAXSIZE 1024
 
typedef int datatype;
 typedef struct
 {
     datatype data[MAXSIZE];
     int top;
 }SeqStack;
 SeqStack *Init_SqeStack()
 {
     SeqStack *s;
     s=(SeqStack*)malloc(sizeof(SeqStack));
     s->top=-1;
     return s;
 }
 int StackEmpty(SeqStack *s)
 {
     if(s->top==-1)
         return 1;
     else return 0;
 }
 int Push(SeqStack *s,datatype x)
 {
     if(s->top==MAXSIZE-1) return 0;
     else
     {s->top++;
     s->data[s->top]=x;
     return 1;
     }
 }
 int Pop(SeqStack *s,datatype *x)
 {
     if(StackEmpty(s)) return 0;
     else{*x=s->data[s->top];
     s->top--;
     return 1;
     }
 }
 void main( )
 {
     
     SeqStack *s, *s1, *s2;
     datatype x,i,j;
     s=Init_SqeStack();
     s1=Init_SqeStack();
     s2=Init_SqeStack();
     printf("输入十个数:\n");
     for(i=0;i<=9;i++)
     {
         scanf("%d",&j);
         Push(s,j);
     }


    //将s栈中的内容转移到s1栈中
     while(StackEmpty ( s ) == 0 )
     {
         Pop( s, &x );
         Push( s1, x );
     }
 
    //将s1栈中的内容转移到s2栈中
     while( StackEmpty( s1 ) == 0 )
     {
         Pop( s1, &x );
         Push( s2, x );
     }
 
    //将s2栈中的内容转移到s栈中
     while( StackEmpty( s2 ) == 0)
     {
         Pop( s2, &x );
         Push( s, x );
     }
     for(i=0;i<=9;i++ )
         printf("%d",s->data[s->top--]);

 }
给你个十个数的例子参照一下,希望有帮助,其实想要逆序输出不用这么麻烦的,在定义结构体的时候加个int base;当数进栈后只要
int p=s->base;
while(p<=s->top)
{
printf("%d",s->date[p]);
p++;
}
就可以实现了
2012-09-23 22:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381691-1-1.html




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

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