STL要用到栈和队列基本概念
介绍一下栈和队列的基本操作
#include "SqStack.h"
#include <stdio.h>
#include <stdlib.h>
/*
初始化一个栈,将顺序栈的指针返回
*/
struct SqStack * InitStack()
{
struct SqStack * s = malloc( sizeof(struct SqStack) );
s->data = malloc(sizeof(ElemType) * MAX_LEN);
s->top = -1;
return s;
}
/*
销毁一个栈
*/
void DestroyStack(struct SqStack * s)
{
if(s == NULL)
{
return ;
}
if(s->data)
{
s->top = -1;
free(s->data);
}
free(s);
}
/*
清空一个栈
*/
void ClearStack(struct SqStack * s)
{
if(s)
{
//清空之后,只能入栈,会把原来的数据覆盖掉
s->top = -1;
}
}
/*
判断是否为空栈
返回值:
1 栈为空
0 栈不为空
*/
int IsEmpty(struct SqStack * s)
{
//栈为空:栈不存在 || 栈里面没有元素
if( s == NULL || s->top == -1 )
{
return 1;
}
return 0;
}
/*
获取栈的长度 (栈中元素的个数)
*/
int StackLength(struct SqStack * s)
{
//if( IsEmpty(s) )
if(s == NULL)
{
return 0;
}
return s->top + 1;
}
/*
入栈
返回值:
1 入栈成功
0 入栈失败
*/
int Push(struct SqStack * s,ElemType d)
{
//不能入栈的情况:栈为空 || 栈满了
if( s == NULL || s->data == NULL || s->top == MAX_LEN-1 )
{
printf("Push error! \n");
return 0;
}
s->data[++(s->top)] = d;
return 1;
}
/*
出栈
返回值:
1 出栈成功
0 出栈失败
*/
int Pop(struct SqStack * s,ElemType *x)
{
//不能出栈的情况:空栈
if(s == NULL || s->data == NULL || s->top == -1)
{
printf("Pop error! \n");
return 0;
}
*x = s->data[ (s->top)-- ];
return 1;
}
/*
获取栈顶元素,但是不出栈
返回值:
1 获取成功
0 获取失败
*/
int GetTop(struct SqStack * s,ElemType *x)
{
//不能获取的情况:空栈
if(s == NULL || s->data == NULL || s->top == -1)
{
//printf("GetTop error! \n");
return 0;
}
*x = s->data[ s->top ];
return 1;
}