21xrx.com
2024-09-20 00:12:56 Friday
登录
文章检索 我的文章 写文章
C++ 栈的代码实现
2023-06-23 05:07:57 深夜i     --     --
实现 代码 C++ 堆栈

栈是一种常见的数据结构,它采用“后进先出”的存储方式。C++ 语言提供了库函数及相关代码,以实现栈的基本操作。然而,在解决实际问题时,自己写代码实现栈可能是必要的。

栈的代码实现需要考虑两个方面:栈的结构和栈的操作。在结构方面,栈可以采用数组或链表来实现。数组实现较为简单,只需要定义一个数组和一个栈指针,每次对栈进行操作时,移动栈指针即可。链表实现会更灵活,但也更复杂些,需要定义节点结构体和头指针等。

在操作方面,栈有基本的入栈与出栈操作。其中入栈会将元素放入栈顶,并移动栈顶指针;出栈则是将栈顶元素弹出,也移动栈顶指针。此外,还有一些辅助操作,例如获取栈顶元素、判断栈是否为空、获取栈的大小等等。

以下是一个基于数组的栈的代码实现:


#define STACK_SIZE 100 // 定义栈大小

class Stack {

private:

  int top; // 栈顶指针

  int data[STACK_SIZE]; // 存储元素的数组

  

public:

  Stack(): top(-1) {} // 初始化栈顶指针为-1

  // 判断栈是否为空

  bool isEmpty()

    return top == -1;

  

  // 获取栈的大小

  int size() {

    return top + 1;

  }

  // 入栈操作

  void push(int val) {

    if (top == STACK_SIZE - 1)

      cout << "Stack overflow" << endl;

      return;

    

    data[++top] = val;

  }

  // 出栈操作

  void pop() {

    if (isEmpty())

      cout << "Stack underflow" << endl;

      return;

    

    top--;

  }

  // 获取栈顶元素

  int peek() {

    if (isEmpty()) {

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

      exit(1);

    }

    return data[top];

  }

};

这个实现中,我们将栈的大小定义为了 `STACK_SIZE`,栈的结构体中包含了栈顶指针 `top` 和存储元素的数组 `data`。在创建栈对象时,栈顶指针初始化为-1。入栈操作 `push()` 中,我们判断栈是否已满,如果满了,将输出 `Stack overflow` 并结束函数。出栈操作 `pop()` 中,我们判断栈是否为空,如果为空,将输出 `Stack underflow` 并结束函数。获取栈顶元素的操作 `peek()` 中,我们通过判断栈是否为空,来决定是输出 `Stack is empty` 并退出程序,还是返回栈顶元素。

上述代码只是基于数组实现的栈代码示例,并不是最优的。实际使用中,应考虑更多方面,例如代码健壮性、性能等问题。此外,通过链表实现的栈的代码,也有它自己的特点和实现细节。总之,在写栈代码时,需充分考虑功能与效率之间的平衡,以便达到最优的效果。

  
  

评论区

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