| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 481 人关注过本帖
标题:求助顺序栈的程序哪里出错创建不得
只看楼主 加入收藏
潘能云
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
求助顺序栈的程序哪里出错创建不得
//顺序栈的基本操作
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef int DataType;
struct SeStack
{  
   DataType elem[MAX];
   int top;

};
struct SeStack *s;

struct SeStack *StackInit();
struct SeStack *StackCreat();
int StackEmpty(SeStack *s);
int StackFull(SeStack *s);
void ClearStack(SeStack *s);
int LengthStack(SeStack *s);
void StackPush(SeStack *s,DataType x);
DataType StackPop(SeStack *s);
DataType StackGetTop(SeStack *s);
void Stackprint(SeStack *s);
int main(void)
{   
     
     struct SeStack *p,*q;
     p=(SeStack *)malloc(sizeof(SeStack));
     q=(SeStack *)malloc(sizeof(SeStack));
     p=StackInit();
     printf("是否为空栈:%d\n",StackEmpty(p));
     q=StackCreat();
     Stackprint(q);

   



     return 0;
}
struct SeStack *StackInit()
{
    SeStack *s;
    s=(SeStack *)malloc(sizeof(SeStack));
    s->top=-1;return s;

}
 SeStack *StackCreat()
{
    SeStack *r;int k;
    r=(SeStack *)malloc(sizeof(SeStack));
    printf("输入入栈数据,以-1作为结束标记\n");
    scanf("%d",&k);
    while(k!=-1)
    {
   
        r->elem[s->top]=k;
        r->top++;

    }
   
return r;


}

int StackEmpty(SeStack *s)
{
    if(s->top=-1)return -1;
    else return 0;
}
int StackFull(SeStack *s)
{
    if(s->top=MAX-1)  return -1;
    else return 0;
}
void ClearStack(SeStack *s)
{
    s->top=-1;
    free(s);
}
int LengthStack(SeStack *s)
{
    return (s->top+1);
}
void StackPush(SeStack *s,DataType x)
{
    if(s->top==MAX-1) printf("栈满");
    else
    {
        s->top++;
        s->elem[s->top]=x;

    }

}
DataType StackPop(SeStack *s)
{
    DataType x;
    if(StackEmpty(s)) return 0;
    else
    {
        x=s->elem[s->top];s->top--;
        return x;
    }


}
DataType StackGetTop(SeStack *s)
{     
    if(StackEmpty(s)) return 0;
    else
    {
     return s->elem[s->top];
    }
}
void Stackprint(SeStack *s)
{   
    DataType k;
    while(s->top!=-1)
    {
        printf("%d\n",s->elem[s->top]);
        k=StackPop(s);

    }

}
搜索更多相关主题的帖子: include 
2011-12-03 12:07
埋首
Rank: 2
等 级:论坛游民
帖 子:24
专家分:76
注 册:2011-12-1
收藏
得分:10 
兄弟,你这代码我是无法给你改了,要是按我的给你做那基本上要重新来过了
建议你还是多去看一下函数方面的东西,尤其是函数传参和函数返回值的问题要
多看。
2011-12-03 16:01
潘能云
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-3
收藏
得分:0 
回复 2楼 埋首
哦,谢谢,但我做的函数返回类型,参数传递我都看过啦 ,要不按你的改法,你指教一下
2011-12-04 14:33
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:10 
#include<stdio.h>
#include<stdlib.h>
#include <memory.h>

#define MAX (100)
typedef int DataType; //此句用的好,可以方便扩展

typedef struct _SeStack_
{  
   DataType elem[MAX];
   int top;
}SeStack;

SeStack *s;

SeStack *StackInit();
int StackCreat(SeStack *stack);
int StackEmpty(SeStack *s);
int StackFull(SeStack *s);
void ClearStack(SeStack *s);
int LengthStack(SeStack *s);
void StackPush(SeStack *s,DataType x);
DataType StackPop(SeStack *s);
DataType StackGetTop(SeStack *s);
void Stackprint(SeStack *s);

int main(void)
{   
     SeStack *p = 0;
     int ret = -1;

     p = StackInit();

     printf("是否为空栈:%d\n",StackEmpty(p));
     
     ret = StackCreat(p);

     Stackprint(p);


     return 0;
}

SeStack *StackInit()
{
    SeStack *s = 0;

    s = (SeStack *)malloc(sizeof(SeStack));
    if(0 == s)
         return 0;
    memset(s, 0, sizeof(SeStack));   //一定要添加,windows默认的空间数据是0xC

    s->top = -1;

    return s;
}


int StackCreat(SeStack *stack)
{
    SeStack *me = stack;
    int k;

    if(0 == me)
         return -1;
   
    printf("输入入栈数据,以-1作为结束标记\n");
    scanf("%d",&k);

    while(k != -1)
    {
         me->top++;             //top 初始化为-1
         me->elem[me->top] = k;

         if(me->top == MAX - 1) //防止输入过界
              break;

         scanf("%d",&k);
    }
   
    return 0;
}


int StackEmpty(SeStack *s)
{
    if(s->top == -1)      //==而不是=
         return -1;
    else
         return 0;
}

int StackFull(SeStack *s)
{
    if(s->top = MAX-1)
         return -1;
    else
         return 0;
}


void ClearStack(SeStack *s)
{
    s->top = -1;

    /*不需要释放堆栈,仅仅是清空里面的内容*/
    //free(s);
}

int LengthStack(SeStack *s)
{
    return (s->top + 1);
}

void StackPush(SeStack *s, DataType x)
{
    if(s->top == MAX-1)
         printf("栈满");
    else
    {
        s->top++;
        s->elem[s->top] = x;
    }
}


DataType StackPop(SeStack *s)
{
    DataType x = 0;

    if(-1 == StackEmpty(s))
         return -1;     //在create时,以-1为结束标志,0作为正常数,需要返回-1
    else
    {
        x = s->elem[s->top];
        s->top--;

        return x;
    }
}


DataType StackGetTop(SeStack *s)
{     
    if(-1 == StackEmpty(s))
         return -1;     //修改理由同上
    else
    {
         return s->elem[s->top];
    }
}


void Stackprint(SeStack *s)
{   
    DataType k;

    while(s->top != -1)
    {
        printf("%d\n", s->elem[s->top]);
        k =  StackPop(s);
    }
}
2011-12-08 16:00
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
在你代码的基础上修改的,可以正常使用。
建议学数据结构,不要拘泥于书本。如排兵布阵,阵法运用存乎一心,别无它也。
2011-12-08 16:02
快速回复:求助顺序栈的程序哪里出错创建不得
数据加载中...
 
   



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

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