|
发表于 2013-1-15 17:59:03
|
显示全部楼层
本帖最后由 sammu 于 2013-1-15 18:07 编辑
对于一个提问者的我有些建议
1. 在拿出你的问题的时候,以代码的形式贴出,也就是要把格式弄好,
这是因为对于一个陌生人解答你的问题,首先没有报酬同时还要付出时间,精力等成本。
在他愿意付出这些的同时,假如他看到的是乱七八糟的代码的时候,拒绝解答的概率就会变大很多。
2. 要加注释,让别人大概知道你代码要表达的是什么。
提问者一定要注意这些,这样才能把解答的成本降下来,你得到的解答的概率才会变大。
对于你的题目我觉得你存在的问题有一下一些方面
1. #define TRUE 1 ; define的定义首先不能有分号..这是基本
2. 函数实参与形参的传递,我觉得你没搞明白,特别是指针,整个代码看下来我觉得这是问题比较严重。
3. while(!stackempty(sa)) ; 这个分号存在是错误的,细节很重要...
根据你的问题,我大概修改了一下,代码如下,希望对你有帮助。
- # include <stdio.h>
- # include <stdlib.h>
- # include <malloc.h>
- # define STACK_INIT_SIZE 50
- # define STACKADD 10
- # define OK 1
- # define ERROR 0
- # define TRUE 1
- # define FALSE 0
- typedef struct stack
- {
- int * base;
- int * top;
- int stacksize;
- }SqStack ; //定义一个栈
- int initstack(SqStack * S)
- {
- S->base=(int * ) malloc (STACK_INIT_SIZE * sizeof(int));
- if(S->base==NULL)
- exit(-1);
- 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==NULL)
- exit (-1);
- 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;
- printf("%d\n",*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; //sa栈
- initstack(&sa);//初始化,要传送sa的地址
- scanf("%d",&N);
- while (N)
- {
- push(&sa,N%8); //压栈 16 top移动0 2 2 top移动2 0 0
- N=N/8;
- printf("%d ",N);
- }
- while(!stackempty(&sa))
- pop(&sa,&j);
-
- return 0;
- }
复制代码
|
|