C++栈的基本操作及原理和STL函数

2022-11-18 16:24:27 浏览数 (1)

文章目录

  • 目录 文章目录 前言 一、栈是什么? 二、使用步骤 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可以帮我们简便处理数据

0 人点赞