📄 栈实现新版.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 + -