单链表实现一个栈
来源:互联网 发布:程序员必须英语好吗 编辑:程序博客网 时间:2024/05/16 12:22
单链表实现的一个栈,只实现了栈的主要功能:push pop
#ifndef _STACK_USE_SINGLE_LINKED_LIST_H_#define _STACK_USE_SINGLE_LINKED_LIST_H_/*********************************************************算法导论:10.2-2 使用单链表实现一个栈使用单链表实现一个栈的 push 操作,只需要向链表中第一个元素之前插入元素,pop 操作将链表的第一个元素删除即可。push 和 pop 操作运行时间为 O(1)。**********************************************************/#include <stdexcept>template <class T>class StackUseSinglyLinkedList{public:// 一个表示链表结点的数据结构class Node{public:// 只有 StackUseSinglyLinkedList 才可以构造这个类型的对象// 访问这个类型的私有成员friend class StackUseSinglyLinkedList < T > ;// 结点的值T value;private:// 默认构造函数,要求类型 T 也要有默认构造函数Node() = default;// 将构造函数设置为私有的,防止在外部创建这个类型的对象Node(const T& e) :_next(nullptr), value(e){}// 指向下一个元素,如果这个值为空,// 表示本结点是链表中的最后一个元素Node* _next;};// 分别在默认构造函数和析构函数中分配和释放头指针指向的内存空间StackUseSinglyLinkedList() { _head = new Node(); }~StackUseSinglyLinkedList();// 栈的 push 操作void push(const T&);// 栈的 pop 操作T pop();// 测试栈是否为空,只需要测试头结点的 _next 是否指向一个空的结点。inline bool empty()const{ return (nullptr == _head->_next); }private:// 链表头结点的指针,指向链表的第一个元素。Node* _head;};template <class T>void StackUseSinglyLinkedList<T>::push(const T& element){// 构造一个结点Node* node = new Node(element);node->_next = _head->_next;_head->_next = node;}template <class T>T StackUseSinglyLinkedList <T>::pop(){// 如果栈为空,则抛出异常if (empty())throw underflow_error("stack empty");Node* node = _head->_next;T value = node->value;_head->_next = node->_next;// 释放出栈元素的空间delete node;return value;}template <class T>StackUseSinglyLinkedList<T>::~StackUseSinglyLinkedList(){// 将链表中元素占用的空间释放Node* node = _head->_next;while (node){Node *n = node->_next;delete node;node = n;}// 释放头结点占用的空间delete _head;}#endif
0 0
- 单链表实现一个栈
- 一个栈实现一个队列
- 一个单链表的实现
- 一个单链表的实现
- java 实现一个栈
- 实现一个栈
- 一个栈实现队列
- java实现一个栈
- java实现一个栈
- 使用一个栈实现一个队列
- 两个队列实现一个栈&两个栈实现一个队列
- 两个栈实现一个队列-----两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列 && 两个队列实现一个栈
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- OpenCV基础篇之使用CMake管理工程
- 三大框架整合后Struts2返回Json数据会出现的一些错误以及解决办法
- 什么叫高内聚低耦合?
- CentOS上编译安装OpenCV-2.3.1与ffmpeg-2.1.2
- Unix/Linux编程之size_t、ssize_t
- 单链表实现一个栈
- OpenCV基础篇之读取显示图片
- 单链表若干操作实现
- 60 在 O(1)时间内删除链表结点
- 窗口类标志
- 热拔插更换硬盘方法
- C++中的代码重用
- 模拟退火法模板
- DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash