堆栈代码:
Stack.h
#define STACK_INIT_SIZE 100
#define STACK_INCREATMENT 10
#defineOK 1
#define ERROR 0
#define OVERFOLLOW -1
typedef int Status;
typedef struct{
long *base;
long *top;
int stackSize;
}Stack;
Status InitStack(Stack *S);
Status Push(Stack *S,long val);
Status Pop(Stack *S,long* val);
Status GetTop(Stack *S,long* val);
Stack..C
#include #include "Stack.h"
Status InitStack(Stack* S){
S->base=(long*)malloc(STACK_INIT_SIZE * sizeof(long));
if(!S->base) return ERROR;
S->top= S->base;
S->stackSize= STACK_INIT_SIZE;
return OK;
}
Status Push(Stack *S,long val){
if((S->top -S->base)>=S->stackSize) {
S->base=(long*)realloc(S->base,(S->stackSize+STACK_INCREATMENT) * sizeof(long));
if(!S->base) return OVERFOLLOW;
S->top= S->base +S->stackSize;
S->stackSize+= STACK_INCREATMENT;
}
*(S->top++)=val;
return OK;
}
Status Pop(Stack *S,long* val){
if(S->top==S->base) return ERROR;
*val=*(--S->top) ;
return OK;
}
Status GetTop(Stack *S,long* val){
if(S->top==S->base) return ERROR;
*val=*(S->top-1) ;
return OK;
}
main函数:
Fibonacci.C
#include "Stack.h"
#include int main(){
long result=0;
long num;
num=50;
Stack S;
S.base=0;
S.top=0;
S.stackSize=0;
InitStack(&S);
for(int i=num;i>0;i--){
Push(&S,i);
}
long val=0;
long smaller=0;
long bigger=0;
while(Pop(&S,&val)){
if (1==val){
smaller=1;
result=smaller;
}
if (2==val){
bigger=2;
result=bigger;
}
if (val>2){
result=bigger+smaller;
smaller=bigger;
bigger=result;
}
printf("%d ",result);
}
return 0;
}