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

简介: 目录文章目录前言一、栈是什么?二、使用步骤1.栈的结构定义2.构造一个栈3.入栈 4.出栈5.返回栈顶空间 三、STL总结

文章目录



前言

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


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

一、栈是什么?

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

image.png

二、使用步骤

1.栈的结构定义

代码如下(示例):

动态分配

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

静态分配

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

image.png

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;
}

image.png

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;
}

image.png

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

相关文章
|
13天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
35 4
|
15天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
37 5
|
15天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
25 2
|
20天前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
40 0
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
74 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
67 1
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
62 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
26 0
C++ 多线程之线程管理函数
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
29 0