21xrx.com
2024-12-27 05:44:45 Friday
登录
文章检索 我的文章 写文章
C++进栈出栈程序的实现
2023-07-06 01:04:30 深夜i     --     --
C++ 进栈 出栈 程序 实现

栈是一种先进后出(Last in First Out,简称LIFO)的数据结构,常用于编程中的内存分配和算法实现等场景。在C++中,我们可以利用数组或链表等数据结构实现栈。下面我们将介绍如何编写一个基于数组的栈实现。

1. 定义栈类

首先,我们需要定义一个类来表示栈。在这个类中,我们需要声明并定义以下三个主要成员变量:栈的容量(即数组的长度)、栈顶指针和数组。

class Stack {

private:

  int max_size; // 栈的容量

  int top; // 栈顶指针

  int* data; // 数组

public:

  Stack(int size); // 栈的初始化

  ~Stack(); // 析构函数

  void push(int num); // 入栈操作

  int pop(); // 出栈操作

  bool is_empty(); // 判断栈是否为空

  bool is_full(); // 判断栈是否已满

};

2. 初始化栈

我们需要在类的构造函数中对栈进行初始化。在这个函数中,我们需要定义数组并对栈顶指针进行初始化。

Stack::Stack(int size) {

  max_size = size;

  top = -1;

  data = new int[max_size];

}

3. 入栈操作

入栈操作即将一个元素放入栈中。在这个操作中,我们需要先判断栈是否已满,如果已满则不再添加元素。否则,我们在数组中找到栈顶指针所指位置,将新元素赋值到该位置,然后将栈顶指针向上移动一个位置。

void Stack::push(int num) {

  if (is_full())

    std::cout << "Stack is full." << std::endl;

    return;

  top++;

  data[top] = num;

}

4. 出栈操作

出栈操作即从栈中取出一个元素。在这个操作中,我们需要先判断栈是否为空,如果为空则不能出栈。否则,我们取出栈顶元素,并将栈顶指针向下移动一个位置。

int Stack::pop() {

  if (is_empty())

    std::cout << "Stack is empty." << std::endl;

    return -1;

  int temp = data[top];

  top--;

  return temp;

}

5. 判断栈是否为空或已满

我们还需要定义两个函数 is_empty()和 is_full()用于判断栈是否为空或已满。如果栈顶指针的值等于-1,则表示栈为空。如果栈顶指针的值等于栈容量-1,则表示栈已满。

bool Stack::is_empty()

  return top == -1;

bool Stack::is_full()

  return top == max_size - 1;

6. 销毁栈

当我们使用完栈后,需要将其占用的内存释放。在类的析构函数中,我们需要释放数组所占用的内存。

Stack::~Stack() {

  delete[] data;

}

以上就是一个基于数组的栈实现。在使用时,我们首先需要创建一个栈对象,然后调用相应的函数进行元素的入栈、出栈、判断栈是否为空或已满等操作。这种实现方式简单易懂,但是存在一个问题,即栈的容量在初始化时必须确定,无法进行动态扩容。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复