holyya.com
2025-09-04 23:37:08 Thursday
登录
文章检索 我的文章 写文章
C++创建栈的方法
2023-06-28 06:46:46 深夜i     --     --
C++ 创建 方法

在 C++ 中,我们可以通过使用数组或链表来创建栈。栈是一种最基本的数据结构之一,它具有后进先出的特点。当我们需要在程序中维护一个后进先出的数据集合时,我们可以使用栈。

### 使用数组创建栈

C++ 中使用数组来创建栈非常简单,我们可以定义一个数组来存储栈的元素和一个变量 top 来表示栈顶位置的下标。下面是一个简单的示例代码:


#include <iostream>

using namespace std;

const int MAX_SIZE = 100;

class Stack {

  private:

    int arr[MAX_SIZE];

    int top;

  public:

    Stack()

      top = -1;

    

    bool isEmpty()

      return top == -1;

    

    bool isFull()

      return top == MAX_SIZE - 1;

    

    void push(int x) {

      if (isFull())

        cout << "Stack Overflow" << endl;

        return;

      

      arr[++top] = x;

    }

    void pop() {

      if (isEmpty())

        cout << "Stack Underflow" << endl;

        return;

      

      top--;

    }

    int peek() {

      if (isEmpty())

        cout << "Stack is empty" << endl;

        return -1;

      

      return arr[top];

    }

};

int main() {

  Stack s;

  s.push(10);

  s.push(20);

  s.push(30);

  s.push(40);

  cout << s.peek() << endl;

  s.pop();

  s.pop();

  cout << s.peek() << endl;

  return 0;

}

在上面的代码中,我们首先定义了一个常量 MAX_SIZE 来表示数组的最大大小。接着,我们定义了一个 Stack 类来表示栈。Stack 类中包含了栈的基本操作,比如 push()、pop()、peek() 等。其中,isFull() 和 isEmpty() 方法用来检查栈是否已满或为空。

在 main() 函数中,我们创建了一个 Stack 对象 s,并调用 push() 方法将元素 10、20、30 和 40 添加到栈中。接着,我们调用 peek() 方法来获取栈顶元素。然后,我们连续调用两次 pop() 方法来弹出栈顶元素。最后,我们再次调用 peek() 方法来获取新的栈顶元素。

### 使用链表创建栈

除了使用数组来创建栈外,我们还可以使用链表。链表是一种动态数据结构,它能够动态地增加或删除节点。在这种情况下,我们需要定义一个节点类 Node,该类包含一个数据成员和一个指向下一个节点的指针。下面是一个示例代码:


#include <iostream>

using namespace std;

class Node {

  public:

    int data;

    Node* next;

};

class Stack {

  private:

    Node* top;

  public:

    Stack()

      top = NULL;

    

    bool isEmpty()

      return top == NULL;

    

    void push(int x) {

      Node* newNode = new Node();

      newNode->data = x;

      newNode->next = top;

      top = newNode;

    }

    void pop() {

      if (isEmpty())

        cout << "Stack Underflow" << endl;

        return;

      

      Node* temp = top;

      top = top->next;

      delete temp;

    }

    int peek() {

      if (isEmpty())

        cout << "Stack is empty" << endl;

        return -1;

      

      return top->data;

    }

};

int main() {

  Stack s;

  s.push(10);

  s.push(20);

  s.push(30);

  s.push(40);

  cout << s.peek() << endl;

  s.pop();

  s.pop();

  cout << s.peek() << endl;

  return 0;

}

在上面的代码中,我们首先定义了一个 Node 类作为链表节点。接着,我们定义了一个 Stack 类来表示栈。在 Stack 类中,我们使用一个指针 top 来指示栈顶节点。Stack 类包含了栈的基本操作,包括 push()、pop()、peek() 等。在 push() 方法中,我们创建一个新的节点,并将它添加到链表头部。在 pop() 方法中,我们删除链表头部的节点。我们还定义了一个 isEmpty() 方法来检查栈是否为空。

在 main() 函数中,我们创建了一个 Stack 对象 s,并调用 push() 方法将元素 10、20、30 和 40 添加到栈中。接着,我们调用 peek() 方法来获取栈顶元素。然后,我们连续调用两次 pop() 方法来弹出栈顶元素。最后,我们再次调用 peek() 方法来获取新的栈顶元素。

以上就是使用 C++ 创建栈的两种方法,每种方法都使用了不同的数据结构实现栈结构。程序员可以据此来选择适合自己程序的实现方法。

  
  

评论区

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