栈和队列(基本实现)
发布日期: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
queue的链实现
template
class 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秒