21xrx.com
2025-07-11 06:17:33 Friday
文章检索 我的文章 写文章
完整的C++顺序栈代码
2023-06-26 04:49:31 深夜i     23     0
C++ 顺序栈 代码 完整

顺序栈是一种基于数组实现的栈结构,它具有先进后出的特点。C++是一种高级编程语言,具有丰富的数据类型和面向对象的特性,可以用它来实现顺序栈。下面是一个完整的C++顺序栈代码实现。

首先,我们需要定义一个顺序栈的结构体,包括栈的大小和指向栈底的指针。

const int maxsize = 100; // 栈的最大大小
struct SeqStack {
  int data[maxsize]; // 存储数据元素的数组
  int top; // 栈顶指针
};

接着,我们需要实现顺序栈的初始化、入栈、出栈、获取栈顶元素和判断栈是否为空等操作。代码如下:

// 初始化栈
void InitStack(SeqStack &s)
  s.top = -1;
// 判断栈是否为空
bool IsEmpty(SeqStack s)
  return s.top == -1;
// 入栈
bool Push(SeqStack &s, int x) {
  if (s.top == maxsize - 1)
    return false; // 栈满,入栈失败
  s.data[++s.top] = x; // 将元素x入栈
  return true;
}
// 出栈
bool Pop(SeqStack &s, int &x) {
  if (s.top == -1)
    return false; // 栈空,出栈失败
  x = s.data[s.top--]; // 将栈顶元素赋值给x,栈顶指针减1
  return true;
}
// 获取栈顶元素
bool GetTop(SeqStack s, int &x) {
  if (s.top == -1)
    return false; // 栈空,获取栈顶元素失败
  x = s.data[s.top]; // 将栈顶元素赋值给x
  return true;
}

最后,我们可以通过调用这些操作来实现一些简单的栈操作,如求解一个表达式的值。代码如下:

#include <iostream>
#include <stack>
using namespace std;
// 定义顺序栈结构体和操作
const int maxsize = 100;
struct SeqStack {
  int data[maxsize];
  int top;
};
void InitStack(SeqStack &s) {
  s.top = -1;
}
bool IsEmpty(SeqStack s) {
  return s.top == -1;
}
bool Push(SeqStack &s, int x) {
  if (s.top == maxsize - 1)
    return false;
  s.data[++s.top] = x;
  return true;
}
bool Pop(SeqStack &s, int &x) {
  if (s.top == -1)
    return false;
  x = s.data[s.top--];
  return true;
}
bool GetTop(SeqStack s, int &x) {
  if (s.top == -1)
    return false;
  x = s.data[s.top];
  return true;
}
// 求解表达式的值
int main() {
  SeqStack s;
  InitStack(s); // 初始化栈
  string exp;
  cin >> exp; // 读入表达式
  int len = exp.length();
  for (int i = 0; i < len; i++) {
    if (isdigit(exp[i])) {
      int num = exp[i] - '0';
      while (isdigit(exp[++i])) {
        num = num * 10 + exp[i] - '0';
      }
      Push(s, num); // 数字入栈
      i--; // 处理完数字,回退一位
    } else {
      int a, b;
      Pop(s, b);
      Pop(s, a);
      switch (exp[i]) {
        case '+': Push(s, a + b); break;
        case '-': Push(s, a - b); break;
        case '*': Push(s, a * b); break;
        case '/': Push(s, a / b); break;
      }
    }
  }
  int result;
  GetTop(s, result); // 取出栈顶元素,即为表达式的值
  cout << result << endl;
  return 0;
}

上述代码中,我们通过循环读入表达式中的字符,并通过判断是数字还是运算符来进行不同的栈操作,从而实现了求解表达式的值的功能。

总体来说,这是一个基础且简单的C++顺序栈代码实现。此代码仅能完成基础的栈操作,更高级的应用需要在此基础上进一步开发。

  
  

评论区