C语言利用模板实现简单的栈类

2020-01-06 20:12:49于海丽

上面是通过数组来实现,与数组相比,链表实现更灵活,更容易增删元素。 
单链表实现的核心思想是不断更新栈顶指针,来实现出栈压栈,每一个节点是一个结构体,包含一个value和一个next指针指向下一个元素,初始化时将栈顶指针置为NULL。

 


#pragma once
using namespace std;

template<class type>
struct listnode
{
  type value;
  listnode* next;
  listnode(type v,listnode* p):value(v),next(p){ }
};

template<class type>
class List_stack
{
  listnode<type>* top;
  int size = 0;
public:
  List_stack();
  void Push(type &tp);
  void Pop();
  bool Empty();
  int Size();
  void Print();
  ~List_stack()
  {
    while (top)
    {
      listnode<type> * p = top;
      top = top->next;
      delete p;
    }
  }
};
template<class type>
bool List_stack<type>::Empty()
{
  if (top == NULL)
    return true;
  else
  {
    return false;
  }
}
template<class type>
List_stack<type>::List_stack()
{
  top = NULL;
  size = 0;
}
template<class type>
void List_stack<type>::Push(type &tp)
{
  listnode<type> *tmp=new listnode<type>(tp,top);
  top = tmp;
  size++;
}
template<class type>
void List_stack<type>::Pop()
{
  if (top == NULL)
  {
    cout << "为空栈" << endl;
  }
  else
  {
    top = top->next;
    size--;
  }

}
template<class type>
int List_stack<type>::Size()
{
  return size;
}
template<class type>
void List_stack<type>::Print()
{
  listnode<type>* tmp = top;
  while (tmp != NULL)
  {
    cout << tmp->value << 't';
    tmp = tmp->next;
  }
}

简单测试:


int main()
{
  List_stack<int> ls;
  for (int i = 0; i < 5; i++)
    ls.Push(i);
  ls.Print();
  ls.Pop();
  ls.Pop();
  cout << endl;
  ls.Print();
  cout << endl;
  cout << ls.Size();
  system("pause");
  return 0;
}

C语言,模板,栈类

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。