栈和队列(基本实现)
发布日期:2021-09-19 03:18:19
浏览次数:2
分类:技术文章
本文共 2310 字,大约阅读时间需要 7 分钟。
一. 栈
1 定义:
栈(stack)是一种常用的重要数据结构(线性表),它只允许在栈顶(top)进行删除,插入,由于其具有后进先出的特性,又被叫做后进先出线性表。
2.常用存储方式:
1.顺序存储方式 2.链式存储方式
顺序栈:
是指用顺序存储方式存储的栈,绝大多数情况下是用数组来进行存储。这种存储方式会由一个maxsize,即栈最大允许存放元素的个数。
这种存储方式相对简单,实现起来很方便。
一个顺序栈类中包含了三个属性,分别为:1.栈顶指针(常常为数组下标) 2.栈数组(即存放栈中元素的数组) 3.栈最大允许容纳元素个数
stack中的函数
- empty
- size
- back
- push_back
- pop_back
- 动态实现
#include
#include using namespace std;template //template class stack{public: stack()//构造 :_a(NULL), _size(0), _capacity(0) { } ~stack()//析构 { if (_a) { delete[] _a; _capacity = _size = 0; } } void checkcapacity() { if (_size >= _capacity)//判断空间是否满了 { _capacity = _capacity == 0 ? 3 : _capacity * 2;//开空间 T *tmp = new T[_capacity];//拷数据 for (size_t i = 0; i < _size; ++i) { tmp[i] = _a[i]; } delete[] _a;//释放空间 _a = tmp; } } void push(const T& x)//插入 { checkcapacity();//检查容量 _a[_size++] = x; } void print() { for (size_t i = 0; i<_size; ++i) { cout << _a[i] << " "; } } T& pop()//删除 { assert(_size > 0); cout << _a[_size - 1] << endl; --size; } T& top()//取栈顶元素 { assert(_size > 0); return _a[_size - 1]; } bool Empty()//检查是否为空 { return _size == 0; } size_t size()//元素个数 { return _size; }private: T *_a;//指针 size_t _size;//已存的数据(下标) size_t _capacity;//容量};
- 二.队列
- 队列(queue)是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
- queue中的函数
- empty
- size
- front
- back
- push_back
- pop_front
templateclass Queue{ typedef QueueNode Node;public: Queue() :_head(NULL) , _tail(NULL) {} ~Queue() { Node* cur = NULL; while (_head!=NULL) { cur = head; delete cur; _head = _head->_next; } _head = _tail = NULL; } void push(Node* x) { if (_head == NULL) { _head = _tail=new Node(x); } else { _tail->_next = new Node(x); _tail = _tail->_next; } } void pop() { assert(!Empty()); Node* del = _head; _head = _head->_next; delete del; } T& Front() { return _head->_data; } bool Empty() { return _head == NULL; } size_t size() { size_t count = 0; Node* cur = _head; while (cur) { count++; cur = cur->_next; } return count; }private: Node* _head;//头 Node* _tail;//尾};
转载地址:https://blog.csdn.net/audience_fzn/article/details/78232513 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月22日 03时52分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
让我们谈谈RAID
2019-04-27
jQuery日期选择器插件date-input
2019-04-27
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27
PHP session回收机制
2019-04-27
最新的全球编程语言,操作系统,web服务器等使用率分析报告
2019-04-27
用C语言写PHP扩展
2019-04-27
PHP Extension programming
2019-04-27
海量数据处理
2019-04-27
PHP防止注入攻击
2019-04-27
多路IO复用模型 select epoll 等
2019-04-27
Linux Epoll介绍和程序实例
2019-04-27
output_buffering详细介绍
2019-04-27
php缓冲 output_buffering和ob_start
2019-04-27