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

举报
莫浅子 发表于 2022/12/21 22:23:15 2022/12/21
【摘要】 ​文章目录目录文章目录前言一、栈是什么?二、使用步骤1.栈的结构定义2.构造一个栈3.入栈 4.出栈5.返回栈顶空间  三、STL总结前言后进先出的线性序列称为栈提示:以下是本篇文章正文内容,下面案例可供参考一、栈是什么?栈是限定仅在尾部进行插入和删除操作的线性表​编辑二、使用步骤1.栈的结构定义代码如下(示例): 动态分配 //顺序栈//动态分配typedef struct SqStack...

文章目录



前言

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


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

一、栈是什么?

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

编辑

二、使用步骤

1.栈的结构定义

代码如下(示例):

动态分配 

//顺序栈
//动态分配
typedef struct SqStack {
   ElemType *base; //栈底指针
   ElemType *top; //栈顶指针
}SqStack; 

 静态分配

typedef struct SqStack{
  Elemytype date[Maxsize];   //定义数组
  int top;   //栈顶下标
 }SqStack;

 编辑


2.构造一个栈

代码如下(示例)

 第一种 bool类型

#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

  常用函数如下

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。