鱼C论坛

 找回密码
 立即注册
查看: 4462|回复: 6

不知道那里错了 高手给看看

[复制链接]
发表于 2013-1-15 15:52:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100;
#define STACKADD 10;
#define OK 1;
#define ERROR 0;
#define TRUE 1;
#define FALSE 0;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack ;
int initstack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int gettop(SqStack S)
{
int e;
if(S.top==S.base) return 0;
e=*(S.top-1);
return e;
}
int push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
  S.base=(int *)realloc(S.base,(S.stacksize+STACKADD)*sizeof(int));
  if (!S.base) exit (OVERFLOW);
  S.top=S.base+S.stacksize;
  S.stacksize+=STACKADD;
}
*S.top++ =e;
return OK;
}
int pop(SqStack &S,int &e)
{
if (S.top==S.base) return ERROR;
e = *--S.top;
return OK;
}
int stackempty(SqStack S)
{ if (S.top==S.base) return TRUE
    else return FALSE;
}
int main()
{
int j,N;
SqStack sa;

initstack(sa);
scanf("%d",&N);
while (N)
{ push(sa,N%8);
  N=N/8;
  printf("%d  ",N);
}
while(!stackempty(sa));
{ pop(sa,j);
  printf("%d",j);
}



return 0;
}


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-15 16:12:35 | 显示全部楼层
前排观看,混个脸熟
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-15 16:51:29 | 显示全部楼层
先看下吧,再来
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-15 17:59:03 | 显示全部楼层
本帖最后由 sammu 于 2013-1-15 18:07 编辑

对于一个提问者的我有些建议
1. 在拿出你的问题的时候,以代码的形式贴出,也就是要把格式弄好,
这是因为对于一个陌生人解答你的问题,首先没有报酬同时还要付出时间,精力等成本。
在他愿意付出这些的同时,假如他看到的是乱七八糟的代码的时候,拒绝解答的概率就会变大很多。
2. 要加注释,让别人大概知道你代码要表达的是什么。
提问者一定要注意这些,这样才能把解答的成本降下来,你得到的解答的概率才会变大。

对于你的题目我觉得你存在的问题有一下一些方面
1. #define TRUE 1 ;      define的定义首先不能有分号..这是基本
2. 函数实参与形参的传递,我觉得你没搞明白,特别是指针,整个代码看下来我觉得这是问题比较严重。
3. while(!stackempty(sa)) ;  这个分号存在是错误的,细节很重要...


根据你的问题,我大概修改了一下,代码如下,希望对你有帮助。

  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <malloc.h>
  4. # define STACK_INIT_SIZE 50
  5. # define STACKADD 10
  6. # define OK 1
  7. # define ERROR 0
  8. # define TRUE 1
  9. # define FALSE 0

  10. typedef struct stack
  11. {
  12.   int * base;
  13.   int * top;
  14.   int stacksize;
  15. }SqStack ; //定义一个栈


  16. int initstack(SqStack * S)
  17. {
  18.   S->base=(int * ) malloc (STACK_INIT_SIZE * sizeof(int));
  19.   if(S->base==NULL)
  20.           exit(-1);
  21.   S->top=S->base;
  22.   S->stacksize=STACK_INIT_SIZE;
  23.   return OK;
  24. }
  25. /*
  26. int gettop(SqStack S)
  27. {
  28.    int e;
  29.    if(S.top==S.base) return 0;
  30.      e=*(S.top-1);
  31.    return e;
  32. }

  33. */

  34. //压栈
  35. int push(SqStack * S,int e)
  36. {
  37.    if((S->top-S->base)>=S->stacksize) //扩容问题
  38.     {
  39.          S->base=(int *)realloc(S->base,(S->stacksize+STACKADD)*sizeof(int));
  40.          if (S->base==NULL)
  41.                          exit (-1);
  42.          S->top=S->base+S->stacksize;
  43.          S->stacksize+=STACKADD;
  44.     }

  45.     S->top+=e;
  46.     return OK;
  47. }

  48. int pop(SqStack * S,int * e)
  49. {  
  50.         

  51.    // if (S->top==S->base) return ERROR; //已经判断是否非空了,个人觉得这一步就没有意义了
  52.         e = S->top;
  53.     printf("%d\n",*e);
  54.         --S->top;//根本就没有把内容压入栈内,我不知道这一步的意义..
  55.     return OK;
  56. }

  57. int stackempty(SqStack * S)
  58. {
  59.     if(S->top==S->base)
  60.            return TRUE;
  61.     else
  62.            return FALSE;
  63. }

  64. int main()
  65. {
  66.     int j,N;
  67.     SqStack sa; //sa栈
  68.     initstack(&sa);//初始化,要传送sa的地址
  69.     scanf("%d",&N);
  70.     while (N)
  71.     {
  72.       push(&sa,N%8); //压栈 16 top移动0 2 2 top移动2 0 0
  73.       N=N/8;
  74.       printf("%d  ",N);
  75.     }

  76.     while(!stackempty(&sa))
  77.         pop(&sa,&j);
  78.         
  79.     return 0;
  80. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-15 18:09:37 | 显示全部楼层
怎么不说具体什么错误?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-15 18:48:20 | 显示全部楼层

第一次问问题,不太知道规矩啊,下次注意。多谢指教。
经过调试发现1、3就是问题的正解,关于这个程序其实是抄自数据结构的书 ,经验证是正确的。
再进一步修改成你说的形式用->也可以。又涨见识了。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-15 22:35:52 | 显示全部楼层
wjb8love_9c7c9c 发表于 2013-1-15 18:48
第一次问问题,不太知道规矩啊,下次注意。多谢指教。
经过调试发现1、3就是问题的正解,关于这个程序其 ...

嗯,我也是刚学的编程,只是希望我们菜鸟能通过合理的请教问题而增加别人回答的概率,一起进步吧
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-9 04:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表