首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++栈的基本操作及原理和STL函数

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

作者头像
莫浅子
发布2022-11-18 16:24:27
发布2022-11-18 16:24:27
5540
举报

文章目录



前言

后进先出的线性序列称为栈


提示:以下是本篇文章正文内容,下面案例可供参考

一、栈是什么?

栈是限定仅在尾部进行插入和删除操作的线性表

二、使用步骤

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可以帮我们简便处理数据

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、栈是什么?
  • 二、使用步骤
    • 1.栈的结构定义
    • 2.构造一个栈
    • 3.入栈
    •  4.出栈
    • 5.返回栈顶空间 
  •  三、STL
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档