您的位置:首页 > 编程语言 > C语言/C++

C语言不用递归(使用栈)实现斐波那契数列练习

2013-06-13 14:22 1151 查看
堆栈代码:

Stack.h

#define STACK_INIT_SIZE 100
#define STACK_INCREATMENT 10

#define	OK 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 <malloc.h>
#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 <stdio.h>

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐