C语言不用递归(使用栈)实现斐波那契数列练习
2013-06-13 14:22
1151 查看
堆栈代码:
Stack.h
Stack..C
main函数:
Fibonacci.C
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; }
相关文章推荐
- 【多位数】【多重括号】【带负数】【字符表达式运算】【使用递归】【不用栈实现】
- 小朋友学C语言(16):斐波那契数列的非递归实现
- C语言:编写一个函数实现n^k,使用递归实现
- C语言实现斐波那契数列(非递归)的实例讲解
- 用c语言实现 编写一个函数实现n^k,使用递归实现
- 【C语言】编写一个函数实现n^k,使用递归实现
- 小朋友学C语言(17):斐波那契数列的递归实现
- 不用递归方法实现斐波那契数列,输入数字n 将会输出该数列的第n个数字
- C语言 编写一个函数实现n^k,使用递归实现
- C语言实现斐波那契数列的两种方法(递归和迭代)
- 【C语言】【面试题】【笔试题】编写一个函数实现n^k,使用递归实现
- 【C语言】编写一个函数实现n^k,使用递归实现。
- 【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。
- 使用递归实现斐波那契数列
- 使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法
- 不用递归,使用栈实现快速排序(非常好理解)
- 如何使用C语言实现递归调用
- 数据结构 使用递归任意进制转换(c语言实现)
- 不用递归方法实现斐波那契数列,输入数字n 将会输出该数列的第n个数字
- 使用c语言指针和递归方法实现二分查找