21xrx.com
2024-12-22 21:33:44 Sunday
登录
文章检索 我的文章 写文章
C++实现顺序栈并实现数制转换
2023-06-24 06:23:10 深夜i     --     --
C++ 顺序栈 数制转换 实现 编程

C++是一种高效且广泛使用的编程语言,很适合学习数据结构和算法。其中一个重要的数据结构是栈,它是一种LIFO(Last In First Out)数据结构,即后进先出。而顺序栈就是在数组上实现的栈。

我们可以使用C++实现顺序栈,一个最基本的实现如下:


const int MAX_SIZE = 100; // 定义栈的最大长度

template<typename T>

class SeqStack{

private:

  T data[MAX_SIZE];

  int top; // 栈顶指针

public:

  SeqStack() top = -1; // 构造函数,初始化栈顶指针为-1

  bool isempty() return top == -1; // 判断栈是否为空

  bool isfull() return top == MAX_SIZE - 1; // 判断栈是否已满

  bool push(T x) { // 元素入栈

    if(isfull()) return false;

    data[++top] = x;

    return true;

  }

  bool pop() { // 元素出栈

    if(isempty()) return false;

    top--;

    return true;

  }

  T gettop() { // 获取栈顶元素

    if(isempty()) return NULL; // 注意栈顶元素可能为NULL

    return data[top];

  }

};

这个实现包括了栈的基本操作:判断栈是否为空、判断栈是否已满、入栈、出栈、获取栈顶元素。我们可以用这个实现来进行数制转换。

数制转换是将一个数字从一种数制表示变换为另一种数制表示。我们首先将待转换的数字不断除以目标进制,得到的余数就是转换后的数字的末位,而商则作为下一个除数。将得到的余数依次入栈,最后将它们依次出栈就能得到转换后的数字的每一位。

例如,将十进制的107转换为二进制:


int num = 107;

SeqStack<int> s;

while(num){ // 当num不为0时

  s.push(num % 2);

  num /= 2;

}

while(!s.isempty()){ // 将s中的元素依次出栈

  cout << s.gettop();

  s.pop();

}

输出为“1101011”,也就是十进制的107转换为二进制的结果。

这个例子演示了顺序栈的实现以及利用顺序栈进行数制转换的过程。学习并熟悉数据结构和算法可以让我们在编程中更加灵活和高效,同时也是很好的锻炼思维和代码能力的方式。

  
  

评论区

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