#2
书生牛犊2016-07-20 12:24
对这种程序我也没经验。
一般我的main都是int的。。。 可能你是设计了一个类似于Java类的东西。整个是打包的。 程序代码: #include<stdlib.h> 目前来看,程序是能跑了。。。但我不知道你要实现的是什么功能。#include<stdio.h> #define ERROR 0 #define OK 1 #define STACK_INIT_SIZE 8; #define STACKINCREMENT 2; typedef struct{ int *base; int *top; int stacksize; }SqStack; int Initstack(SqStack &s){ s.base=(int *)malloc(8*sizeof(int)); if(!s.base) return 0; s.top=s.base; //s.top还没初始化吧?你是不是反了 s.stacksize=STACK_INIT_SIZE; return 1; } int Push(SqStack &s,int e){ if(s.top-s.base>=s.stacksize) { s.base=(int*)realloc(s.base,sizeof(int)*4); if(!s.base) return 0; s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT; } *s.top++=e; return e; return 1; } int StackEmpty(SqStack &s){ if(s.base==s.top) return 1; else return 0; } int Pop(SqStack &s,int &e){ if(s.base==s.top) return ERROR; e=*--s.top; return 1; } int main(){//这里的用法。。。说老实话,我是不太懂啦,我改成int了,你随意 int N; SqStack s; int e; Initstack(s); scanf("%d",&N);//这里是不是少了 & ? while(N){ Push(s,N%8); N=N/8; printf("{%d}",N);//这里我加了一个检测,你看看是不是你要的结果,我是看不懂这程序想干嘛啦 } while(!StackEmpty(s)){ Pop(s,e); printf("%d",e); } return 0; } 如果说你只是想做个栈,我建议你用链表。每次插入在表头,读取从表头,什么时候链表读完了栈就清空了。而且这样做的栈内存也会比较大。 |
程序附上:
#include<stdlib.h>
#include<stdio.h>
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE 8;
#define STACKINCREMENT 2;
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
int Initstack(SqStack &s){
s.base=(int *)malloc(8*sizeof(int));
if(!s.base) return 0;
s.base=s.top;
s.stacksize=STACK_INIT_SIZE;
return 1;
}
int Push(SqStack &s,int e){
if(s.top-s.base>=s.stacksize)
{
s.base=(int*)realloc(s.base,sizeof(int)*4);
if(!s.base)
return 0;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return e;
return 1;
}
int StackEmpty(SqStack &s){
if(s.base==s.top)
return 1;
else
return 0;
}
int Pop(SqStack &s,int &e){
if(s.base==s.top)
return ERROR;
e=*--s.top;
return 1;
}
SqStack main(int N){
SqStack s;
int e;
Initstack(s);
scanf("%d",N);
while(N){
Push(s,N % 8);
N=N/8;
}
while(!StackEmpty(s)){
Pop(s,e);
printf("%d",e);
}
return s;
}