CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

C语言数据结构的栈部分一些疑问

楼主BtInside(咸鱼的梦想)2006-03-14 20:23:58 在 C/C++ / C语言 提问

本人c菜鸟  
  前几天看了数据结果就写了一些关于栈的代码  
  后来就顺便写了一个测试的程序:10进制转8进制    
  但是编译通过却没办法运行...请各位大大帮帮忙  
  #include   <stdio.h>  
  #include   <stdlib.h>  
   
  #define   STACK_INIT_SIZE   100  
  #define   STACKINCREMENT   10  
   
  typedef   struct   stacknode  
  {  
  int   *top;   //栈顶指针    
  int   *base;//栈底指针    
  int   stacksize;   //堆栈长度    
  }snode;  
   
  snode   *InitStack(void)//创建一个空的堆栈    
  {  
  snode   *s;  
  s=(snode   *)malloc(sizeof(snode));  
  s->base=(int   *)malloc(sizeof(int)*STACK_INIT_SIZE);  
  s->top=s->base;  
  return(s);  
  }  
   
  void   DestroyStack(snode   *p)//销毁堆栈    
  {  
  snode   *s;  
  s=p;  
  p=s=NULL;  
  free(s);  
  }  
   
  void   ClearStack(snode   *p)//把p置为空栈    
  {  
  snode   *s;  
  s=p;  
  if(s->top==0)   printf("空栈");  
  else    
            {  
            s->top=s->base;  
            }  
  }  
   
  void   GetTop(snode   *p,int   *e)//堆栈不空的话e返回栈顶元素    
  {  
  snode   *s;  
  s=p;  
  if(s->top==0)   printf("空栈");  
  *e=*(s->top-1);  
  }  
   
  void   Push(snode   *p,int   e)//插入e为新元素    
  {  
  snode   *s;  
  s=p;  
  if((int)(s->top-s->base)>=s->stacksize)//堆栈已满    
      {  
      s->base=(int   *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));  
      if(!s->base)   printf("没有空间分配堆栈");  
      s->top=s->base+s->stacksize;//重新确定top的位置    
      s->stacksize+=STACKINCREMENT;//累加,重新分配堆栈的长度    
      }  
  *s->top=e;  
  ++s->top;  
  }  
   
  void   Pop(snode   *p,int   *e)//删除栈顶元素    
  {  
  snode   *s;  
  s=p;  
  if(s->top==0)   printf("空栈");  
  *e=*(--s->top);  
  }  
   
  int   StackEmpty(snode   *p)//判断堆栈是否为空    
  {  
  snode   *s;  
  if(s->top==0)   return(1);  
  else   return(0);  
  }  
   
  int   main()//将10进制数转为8进制数    
  {  
  snode   *head;  
  int   n;  
  int   *m;  
   
  head=InitStack();  
  n=getchar();  
  while(n)  
                  {  
                  Push(head,n%8);    
                  n=n/8;  
                  }  
  while(!StackEmpty(head))  
                                                  {  
                                                  Pop(head,m);  
                                                  printf("%d",*m);  
                                                  }  
  getch();  
  return(0);  
  } 问题点数:20、回复次数:7Top

1 楼BtInside(咸鱼的梦想)回复于 2006-03-14 20:25:34 得分 0

涉及较多指针的...这正是菜鸟的心头大患啊...  
  众高手指点一下吧Top

2 楼ykzhujiang(朱朱)回复于 2006-03-14 20:26:50 得分 0

你这个代码问题很多Top

3 楼BtInside(咸鱼的梦想)回复于 2006-03-14 20:31:33 得分 0

我知道...所以才放在网上  
  希望得到大家的指点Top

4 楼BtInside(咸鱼的梦想)回复于 2006-03-14 20:43:08 得分 0

没有人吗?....Top

5 楼ykzhujiang(朱朱)回复于 2006-03-14 20:44:02 得分 20

简单改了一下,你可以对照一下看看你的问题  
  #include   <stdio.h>  
  #include   <stdlib.h>  
   
  #define   STACK_INIT_SIZE   100  
  #define   STACKINCREMENT   10  
   
  typedef   struct   stacknode  
  {  
  int   *top;   //栈顶指针    
  int   *base;//栈底指针    
  int   stacksize;   //堆栈长度    
  }snode;  
   
  snode   *InitStack(void)//创建一个空的堆栈    
  {  
  snode   *s;  
  s=(snode   *)malloc(sizeof(snode));  
  s->base=(int   *)malloc(sizeof(int)*STACK_INIT_SIZE);  
  s->top=s->base;  
  s->stacksize=STACK_INIT_SIZE;  
  return(s);  
  }  
   
  void   DestroyStack(snode   *p)//销毁堆栈    
  {  
  snode   *s;  
  s=p;  
  p=s=NULL;  
  free(s);  
  }  
   
  void   ClearStack(snode   *p)//把p置为空栈    
  {  
  snode   *s;  
  s=p;  
  if(s->top==0)   printf("空栈");  
  else    
            {  
            s->top=s->base;  
            }  
  }  
   
  void   GetTop(snode   *p,int   *e)//堆栈不空的话e返回栈顶元素    
  {  
  snode   *s;  
  s=p;  
  if(s->top==0)   printf("空栈");  
  *e=*(s->top-1);  
  }  
   
  void   Push(snode   *p,int   e)//插入e为新元素    
  {  
  snode   *s;  
  s=p;  
  if((int)(s->top-s->base)>=s->stacksize)//堆栈已满    
      {  
      s->base=(int   *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));  
      if(!s->base)   {  
      printf("没有空间分配堆栈");  
      return;  
      }  
      s->top=s->base+s->stacksize;//重新确定top的位置    
      s->stacksize+=STACKINCREMENT;//累加,重新分配堆栈的长度    
      }  
  *s->top=e;  
  ++s->top;  
  }  
   
  void   Pop(snode   *p,int   *e)//删除栈顶元素    
  {  
  snode   *s;  
  s=p;  
  if(s->top==s->base)  
  {  
  printf("空栈");  
  return;  
  }  
  *e=*(--s->top);  
  }  
   
  int   StackEmpty(snode   *p)//判断堆栈是否为空    
  {  
  snode   *s;  
  s=p;  
  if(s->top==s->base)   return(1);  
  else   return(0);  
  }  
   
  int   main()//将10进制数转为8进制数    
  {  
  snode   *head;  
  int   n;  
  int   m;  
   
  head=InitStack();  
  //n=getchar();  
  scanf("%d",&n);  
  while(n)  
                  {  
                  Push(head,n%8);    
                  n=n/8;  
                  }  
  while(!StackEmpty(head))  
                                                  {  
                                                  Pop(head,&m);  
                                                  printf("%d",m);  
                                                  }  
  getchar();  
  return(0);  
  }  
  Top

6 楼ykzhujiang(朱朱)回复于 2006-03-14 20:45:27 得分 0

有些函数我没有给你改,因为程序中没有用到,不过不代表他们没有问题,我抛一块砖,等待楼主来寻玉了  
  多思考才会有进步~加油Top

7 楼BtInside(咸鱼的梦想)回复于 2006-03-14 20:49:24 得分 0

感谢...我会继续努力的   ^_^   好心人Top

相关问题

  • C语言实现堆栈数据结构的问题
  • c数据结构问题
  • C#与数据结构
  • c#中的数据结构.
  • 求c语言实现数据结构中堆栈功能的源程序
  • 清华版C++数据结构,诸多疑问,虚心向大家求教!!!!谢谢
  • c和c++数据结构的差别
  • 算法与数据结构 (第2版) 数据结构的一个疑问
  • 数据结构的问题(c语言)
  • 数据结构与C++的关系!!

关键词

  • 指针
  • top
  • snode
  • 堆栈
  • stacksize
  • stackincrement
  • 元素
  • stack
  • malloc
  • init

得分解答快速导航

  • 帖主:BtInside
  • ykzhujiang

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo