数据结构(2)——链表形式的堆栈,以及火车车厢重排问题

来源:互联网 发布:sql 身份证号脱敏 编辑:程序博客网 时间:2024/05/01 05:10

说来惭愧,这一不更新数据结构就是这么长时间,这么搞9月之前怎么完成任务?!执行力还是低了点,以后还是像大牛们学习,争取一天一篇。

链表形式的堆栈早写好了,只是火车车厢重排问题一直没解决,所以暂时只上堆栈的代码,车厢问题调试中。

/*之前的顺序栈是使用顺序表的方式简历,同样也可以使用链表的形式描述而链表的描述也可以拓展Chain,也可以自己定义,再次直接自己定义*/#ifndef LinkedStack_H_#define LinkedStack_H_#include<iostream>template<class T>class LinkedStack;  template<class T>class Node{friend class LinkedStack<T>;private:T data;Node<T> *link;};template<class T>class LinkedStack{public:LinkedStack() { top = 0; }~LinkedStack();bool IsEmpty() const { return top == 0;}bool IsFull() const;T Top() const;LinkedStack<T>& Add(const  T& x);LinkedStack<T>& Delete(T& x);private:Node<T> *top;//指向栈顶节点};template<class T>LinkedStack<T>::~LinkedStack(){//析构函数Node<T> *next;while (top){next = top->link;delete top;top = next;}}template<class T>bool LinkedStack<T>::IsFull() const{//堆栈是否满,通过实际创建一个类型为Node的节点来判断try{Node<T> *P = new Node<T>;delete p;return false;}catch (NoMem){ return true; }}template<class T>T LinkedStack<T>::Top() const{//返回栈顶元素if (IsEmpty()) throw OutOfBounds();return top->data;}template<class T>LinkedStack<T> &LinkedStack<T>::Add(const T& x){//添加元素xNode<T> *p = new Node<T>;p->data = x;p->link = top;top = p;return *this;}template<class T>LinkedStack<T> &LinkedStack<T>::Delete(T& x){//删除栈顶元素,并将其送入xif (IsEmpty()) throw OutOfBounds();x = top->data;Node<T> *p = top;top = top->link;delete p;return *this;}//异常处理class OutOfBounds{public:OutOfBounds() {}};class NoMem{public:NoMem(){}};//使new引发NoMem异常而不是xalloc异常void my_new_handler(){throw NoMem();}std::new_handler Old_Handler_ = std::set_new_handler(my_new_handler);#endif

0 0
原创粉丝点击