21xrx.com
2024-11-10 00:43:45 Sunday
登录
文章检索 我的文章 写文章
C++栈头文件代码
2023-07-05 00:39:53 深夜i     --     --
C++ 头文件 代码

C++栈是一种常用的数据结构,它可以在程序运行时对所需的数据进行快速的存取和操作。栈头文件是一个用于实现栈结构的代码库,其中包含了栈的基本操作,如压栈、弹栈、判断栈是否为空等。

下面是一个简单的C++栈头文件代码:


#ifndef STACK_H

#define STACK_H

template<typename T>

class Stack {

public:

  Stack();

  ~Stack();

  void push(const T& item);  // 压栈

  T pop();          // 弹栈

  T top() const;       // 获取栈顶元素

  bool empty() const;     // 判断栈是否为空

private:

  T* m_data;         // 栈数据

  int m_size;         // 栈的大小

  int m_top;         // 栈顶指针

};

template<typename T>

Stack<T>::Stack() : m_size(0), m_top(-1), m_data(nullptr)

template<typename T>

Stack<T>::~Stack()

{

  delete[] m_data;

}

template<typename T>

void Stack<T>::push(const T& item)

{

  if (m_data == nullptr) {

    m_data = new T[1];

    m_size = 1;

  }

  else if (m_top == m_size - 1) {

    T* temp = new T[m_size * 2];

    memcpy(temp, m_data, sizeof(T) * m_size);

    delete[] m_data;

    m_data = temp;

    m_size *= 2;

  }

  m_top++;

  m_data[m_top] = item;

}

template<typename T>

T Stack<T>::pop()

{

  if (empty()) {

    throw std::exception("Stack is empty.");

  }

  T item = m_data[m_top];

  m_top--;

  return item;

}

template<typename T>

T Stack<T>::top() const

{

  if (empty()) {

    throw std::exception("Stack is empty.");

  }

  return m_data[m_top];

}

template<typename T>

bool Stack<T>::empty() const

{

  return m_top == -1;

}

#endif // STACK_H

该代码实现了一个模板类`Stack `,其中利用动态内存分配和指针实现了栈的基本操作。该代码还利用了模板类的优点,可以用于存储任意类型的数据。

实际上,在C++ STL中已经提供了标准的栈实现,即`std::stack`。但此代码可能对于C++初学者学习和理解栈的数据结构有很大的帮助。

  
  

评论区

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