| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 777 人关注过本帖
标题:大神帮忙看一下,下面程序的错误,求指导
取消只看楼主 加入收藏
我是我我
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-11-20
结帖率:100%
收藏
 问题点数:0 回复次数:1 
大神帮忙看一下,下面程序的错误,求指导
#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define ERROR -1
#define STACKINITSIZE 20
#define STACKADDSIZE 5

typedef int ElemType;
typedef int Status;
typedef struct
{
  ElemType *top;
  ElemType *base;
  int stackSize;
} sqStack;

Status InitStack(sqStack *s);
Status PushStack(sqStack *s,ElemType e);
Status PopStack(sqStack *s,ElemType *e);
Status ClearStack(sqStack *s);
Status DestroyStack(sqStack *s);
int GetStackLen(sqStack *s);
void my_err(char *s);

int main(int argc,char *argv[])
{
  sqStack s;
  Status result;
  result=InitStack(&s);
  if(result==ERROR)
    {
      my_err("InitStack return Error.");
    }
  int i;
  for(i=0;i<47;i++)
    {
      result=PushStack(&s,i);
      if(result==ERROR)
    {
      my_err("PushStack return Error.");
    }
    }
  ElemType e;
  for(i=0;i<40;i++)
    {
      result=PopStack(&s,&e);
      if(result==FALSE)
    {
      printf("The stack has no value.\n");
      break;
    }
      if(result==TRUE)
    {
      printf("%d,",e);
    }
    }
  printf("\nStack length:%d\n",GetStackLen(&s));
  ClearStack(&s);
  DestroyStack(&s);
  exit(0);
}

//初始化栈
Status InitStack(sqStack *s)
{
  s->base=(ElemType *)malloc(STACKINITSIZE*sizeof(ElemType));
  if(!s->base)
    return ERROR;
  s->top=s->base;
  s->stackSize=STACKINITSIZE;
  return TRUE;
}

//入栈
Status PushStack(sqStack *s,ElemType e)
{
  if(s->top-s->base>=s->stackSize)//当栈空间大小不足时,动态增长栈空间
    {
      s->base=(ElemType *)realloc(s->base,(STACKADDSIZE+s->stackSize)*sizeof(ElemType));
      if(!s->base)
    return ERROR;
      s->top=s->base+s->stackSize;
      s->stackSize+=STACKADDSIZE;
    }
  *(s->top)=e;
  s->top++;
  return TRUE;
}

//出栈
Status PopStack(sqStack *s,ElemType *e)
{
  if(s->top==s->base)
    return FALSE;
  (*e)=*(--s->top);
  return TRUE;
}

//销毁栈
Status DestroyStack(sqStack *s)
{
  free(s->base);
  s->base=s->top=NULL;
  s->stackSize=0;
  return TRUE;
}

//清空栈
Status ClearStack(sqStack *s)
{
  s->top=s->base;
  return TRUE;
}

//获取栈中已有数据的长度
int GetStackLen(sqStack *s)
{
  return s->top-s->base; //注意:地址指针相减,结果并不是地址差,而是实际元素的差值。
}

void my_err(char *s)
{
  perror(s);
  exit(1);
}
搜索更多相关主题的帖子: include 
2016-11-26 19:13
我是我我
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-11-20
收藏
得分:0 
回复 2楼 xzlxzlxzl
但是运行时有错误
2016-12-10 17:21
快速回复:大神帮忙看一下,下面程序的错误,求指导
数据加载中...
 
   



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

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