文章目录
前言
后进先出的线性序列称为栈
提示:以下是本篇文章正文内容,下面案例可供参考
一、栈是什么?
栈是限定仅在尾部进行插入和删除操作的线性表
二、使用步骤
1.栈的结构定义
代码如下(示例):
动态分配
//顺序栈 //动态分配 typedef struct SqStack { ElemType *base; //栈底指针 ElemType *top; //栈顶指针 }SqStack;
静态分配
typedef struct SqStack{ Elemytype date[Maxsize]; //定义数组 int top; //栈顶下标 }SqStack;
2.构造一个栈
代码如下(示例)
第一种 bool类型
1.#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类型
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类型
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.出栈
代码如下(示例)
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.返回栈顶空间
代码如下(示例)
int GetTop(SqStack S) //返回S的栈顶元素,栈顶指针不变 { if (S.top != S.base) //栈非空 return *(S.top - 1); //返回栈顶元素的值,栈顶指针不变 else return -1; }
三、STL
常用函数如下
1. 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可以帮我们简便处理数据