21xrx.com
2025-03-27 16:47:44 Thursday
文章检索 我的文章 写文章
C++ 栈实现 十进制 转 八进制
2023-07-04 22:24:48 深夜i     17     0
C++ 栈实现 十进制 八进制

作为一种常见的数据结构,栈具有许多先进的应用,例如计算表达式、模拟函数调用等等。在实现十进制转八进制过程中,我们也可以运用到栈。

使用 C++ 语言实现栈结构,我们可以定义一个栈的类,其中包含 push、pop 等基本操作,以及一些其他的操作,例如获取栈顶元素等等。在此基础上,我们可以实现十进制转八进制的算法。

具体地,我们可以先将给出的十进制数 n 不断除以 8,并将余数依次压入栈中。当 n 的值小于 8 时,我们便可以得到栈中自低向上排列的八进制数的各位数字。然后我们依次弹出栈中的数字,即可得到八进制表示的数字。

以下是 C++ 实现栈的代码:

#include <iostream>
using namespace std;
const int MAXSIZE = 100;
class Stack{
public:
  Stack()
    top = -1;
  
  void Push(int data){
    if(top >= MAXSIZE)
      cout << "Stack full!" << endl;
      return;
    
    stack[++top] = data;
  }
  int Pop(){
    if(top < 0)
      cout << "Stack empty!" << endl;
      return -1;
    
    return stack[top--];
  }
  int Top(){
    return stack[top];
  }
  bool Empty()
    return top == -1;
  
private:
  int stack[MAXSIZE];
  int top;
};
int main(){
  int n;
  cout << "Enter a decimal number: ";
  cin >> n;
  Stack s;
  if(n == 0){
    s.Push(0);
  }
  while(n % 8 != 0 || n / 8 >= 1){
    int remainder = n % 8;
    s.Push(remainder);
    n /= 8;
  }
  cout << "Octal representation: ";
  while(!s.Empty()){
    cout << s.Pop();
  }
  cout << endl;
  return 0;
}

在此,我们使用了一个常量 MAXSIZE 来定义栈的最大容量,避免了数组越界。在 Stack 类中,我们定义了 push、pop、top 和 empty 函数来操作栈。

具体到这个算法中,我们将每次得到的余数 push 到栈中,当商小于 8 时说明已经得到了八进制表示,依次从栈中 pop 出数字即可。

总而言之,栈是一种常用的数据结构,十分适用于许多问题的求解。在 C++ 中实现栈结构并运用到十进制转八进制的算法中,也是一种很好的学习和练习机会。

  
  
下一篇:

评论区

请求出错了