文章目录
- 目录 文章目录 前言 一、栈是什么? 二、使用步骤 1.栈的结构定义 2.构造一个栈 3.入栈 4.出栈 5.返回栈顶空间 三、STL 总结
前言
后进先出的线性序列称为栈
提示:以下是本篇文章正文内容,下面案例可供参考
一、栈是什么?
栈是限定仅在尾部进行插入和删除操作的线性表
二、使用步骤
1.栈的结构定义
代码如下(示例):
动态分配
代码语言:javascript复制//顺序栈
//动态分配
typedef struct SqStack {
ElemType *base; //栈底指针
ElemType *top; //栈顶指针
}SqStack;
静态分配
代码语言:javascript复制typedef struct SqStack{
Elemytype date[Maxsize]; //定义数组
int top; //栈顶下标
}SqStack;
2.构造一个栈
代码如下(示例)
第一种 bool类型
代码语言:javascript复制#define Maxsize 100 //预先分配空间,这个数值根据实际需要预估确定;
.....
bool InitStack(SqStack &S) //构造一个空栈S
{
S.base = new int[Maxsize];//为顺序栈分配一个最大容量为Maxsize的空间
if (!S.base) //空间分配失败
return false;
S.top=S.base; //top初始为base,空栈
return true;
}
第二种 status(这个表示函数状态 ,类型根据定义 ,如:typedef int Status 或 typedef char Stau)
3.入栈
代码如下(示例)
第一种 bool类型
代码语言:javascript复制bool Push(SqStack &S, int e) // 插入元素e为新的栈顶元素
{
if (S.top-S.base == Maxsize) //栈满
return false;
*(S.top ) = e; //元素e压入栈顶,然后栈顶指针加1,等价于*S.top=e; S.top ;
return true;
}
第二种Status类型
代码语言:javascript复制
typedef int ElemType;
.....
Status Push (SqStack *s ,ElemType e )
{
if(s->top == Maxsize - 1; //栈满
{
return ERROR;
}
s->top ; //栈顶指针增加 1
s->date[s->top] = e; //将新插入的元素赋给栈顶空间
return OK;
}
4.出栈
代码语言:javascript复制代码如下(示例)
bool Pop(SqStack &S, int &e) //删除S的栈顶元素,暂存在变量e中
{
if (S.base == S.top) //栈空
return false;
e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e,等于 e = 是S.top - 1; S.top --;
return true;
}
5.返回栈顶空间
代码语言:javascript复制代码如下(示例)
int GetTop(SqStack S) //返回S的栈顶元素,栈顶指针不变
{
if (S.top != S.base) //栈非空
return *(S.top - 1); //返回栈顶元素的值,栈顶指针不变
else
return -1;
}
三、STL
常用函数如下
代码语言:javascript复制 InitStack(*s) //初始化操作,建立一个空栈s
DestoryStack(*s) //若栈存在,贼销毁它
ClearStack(*s) //将栈清空
StackEmpty (s) //若栈为空返回true,否则返回false;
GetTop(s,*e) //若栈存在且非空,则用e返回栈顶元素
Push(*s,e) //将新元素e插入栈s中并称为栈顶元素
Pop (*s,*e) //删除栈s的栈顶元素,并用e返回其值
StackLength (s) //返回栈s的元素的元素个数
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了栈的使用,而stl可以帮我们简便处理数据