⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 栈实现新版.c

📁 斐波那契数列计算的非递归算法 用栈来模拟递归的经典题目
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
struct SeqStack
{
	int MAXNUM;
	int t;
	int *s;
};
typedef struct SeqStack *PSeqStack;
main()
{
	int n;
	int fib(int);
	int top_seq(PSeqStack pastack);
	PSeqStack creatEmptyStack_seq(int m);
	int isEmptyStack_seq(PSeqStack pastack);
	void push_seq(PSeqStack pastack,int x);
	void pop_seq(PSeqStack pastack);
	scanf("%d",&n);
	printf("%d\n",fib(n));
}
int fib(int n)
{
	int temp,f;
	PSeqStack st;
	st=creatEmptyStack_seq(n);
    temp=0;
	push_seq(st,n);
	while(!isEmptyStack_seq(st))
	{
	if(top_seq(st)==0)
	{
		temp=temp;
		pop_seq(st);
	}
	else if(top_seq(st)==1)
	{
		temp=temp+1;
		pop_seq(st);
	}
	else if(top_seq(st)>1)
	{
		f=top_seq(st);

		pop_seq(st);	
		push_seq(st,f-1);		
		push_seq(st,f-2);
	}
	}
	return temp;
}
PSeqStack creatEmptyStack_seq(int m)
{
	PSeqStack pastack=(PSeqStack)malloc(sizeof(struct SeqStack));
	if(pastack!=NULL)
	{
		pastack->s=(int*)malloc(sizeof(int)*m);
		if(pastack->s){
			pastack->MAXNUM=m;
			pastack->t=0;
			return pastack;
		}
		else free(pastack);
	}
	return NULL;
}
int isEmptyStack_seq(PSeqStack pastack)
{
	return (pastack->t==0);
}
void push_seq(PSeqStack pastack,int x)
{
	if(pastack->t>=pastack->MAXNUM-1)
		printf("Overflow!\n");
	else 
	{
		pastack->t=pastack->t+1;
		pastack->s[pastack->t]=x;
	}
}
void pop_seq(PSeqStack pastack)
{
	if(pastack->t==-1)
		printf("Underflow!\n");
	else
		pastack->t=pastack->t-1;
}
int top_seq(PSeqStack pastack)
{
	if(pastack->t==-1)
		printf("It is empty!\n");
	else 
		return(pastack->s[pastack->t]);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -