21xrx.com
2025-04-17 04:44:45 Thursday
文章检索 我的文章 写文章
C++创建栈的方法
2023-06-28 06:46:46 深夜i     17     0
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++ 创建栈的两种方法,每种方法都使用了不同的数据结构实现栈结构。程序员可以据此来选择适合自己程序的实现方法。

  
  

评论区

请求出错了