栈:LIFO,头插,头出。
队列:尾插,头出。
栈的类型定义:
基本操作:
利用数组的顺序栈存储特点:
具体的实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OVERFLOW 0
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}Sqstack;
Status InitStack(Sqstack *s)
{
s->base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType));
if (!s->base) return OVERFLOW;
s->top =s->base;
s->stacksize = MAXSIZE;
}
//判断栈是否为空
Status StackEmpty(Sqstack S)
{
if(S.base == S.top) return TRUE;
else return FALSE;
}
//求顺序栈的长度
Status StackLength(Sqstack S)
{
return S.top-S.base;
}
//清空栈
Status ClearStack(Sqstack S)
{
if(S.base) S.top = S.base;
return OK;
}
//销毁一段内存
Status DestoryStack(Sqstack *S)
{
if(S->base)
{
S->stacksize = 0; //数组回归内存
S->base =S->top =NULL; //销毁指针
}
return OK;
}
//入栈
Status Push(Sqstack *S,SElemType e)
{
if(S->top-S->base == S->stacksize ) return OVERFLOW;
*(S->top) = e;
S->top++;
return OK;
}
//出栈
Status Pop(Sqstack *S,SElemType *e)
{
if(S->top == S->base) return OVERFLOW;
S->top -=1;
*e = *(S->top);
return OK;
}
void Print_PL(Sqstack S)
{
SElemType *e= S.base;
while(e != S.top)
{
printf("%d\t",*e);
e++;
}
}
int main()
{
Sqstack s;
InitStack(&s);
int e,f;
printf("输入长度");
scanf("%d",&e);
for(int i=0;i<e;i++)
{
printf("输入个数字");
scanf("%d",&f);
Push(&s,f);
}
Print_PL(s);
Pop(&s,&e);
printf("%d\n",e);
Print_PL(s);
return 0;
}
顺序栈的基本实现。