21xrx.com
2024-11-22 07:01:51 Friday
登录
文章检索 我的文章 写文章
完整的C++顺序栈代码
2023-07-13 15:13:54 深夜i     --     --
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++顺序栈代码实现。此代码仅能完成基础的栈操作,更高级的应用需要在此基础上进一步开发。

  
  

评论区

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