当前位置:首页 » 《我的小黑屋》 » 正文

【C++】手撕 栈 & 队列(适配器)

13 人参与  2024年04月13日 18:00  分类 : 《我的小黑屋》  评论

点击全文阅读


目录

一,stack

1,stack的介绍

2,stack 框架

3,push(const T& x)

4,pop()

5,top()

6,size()

7,empty()

8,stack 测试

9,源代码

二,queue

1,queue的介绍

2,queue 框架

3,push(const T& x)

4,pop()

5,front()

6,back()

7,size()

8,empty()

9,queue 测试

10,源代码

三,总结


一,stack

1,stack的介绍

1,stack 是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。

2,stack 是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

3,stack 的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:

empty:判空操作

back:获取尾部元素操作

push_back:尾部插入元素操作

pop_back:尾部删除元素操作

4,标准容器 vectordequelist 均符合这些需求,默认情况下,如果没有为 stack 指定特定的底层容器, 默认情况下使用 deque

2,stack 框架

这里我们要用【适配器】

template<class T,class Container=vector<T>>class stack{public:private:Container _con;};

适配器 Container 可以转换成特定的容器;

3,push(const T& x)

尾插

void push(const T& x){_con.push_back(x);}

4,pop()

尾删

void pop(){_con.pop_back();}

5,top()

取栈顶元素

const T& top(){return _con.back();}

6,size()

堆栈有效数据个数

size_t size(){return _con.size();}

7,empty()

判空

bool empty(){return _con.empty();}

8,stack 测试

void test1(){wxd::stack<int> sk1;sk1.push(1);sk1.push(2);sk1.push(3);sk1.push(4);sk1.pop();cout << sk1.top() << " " << sk1.size() << " " << sk1.empty() << " " << endl;}

9,源代码

template<class T,class Container=vector<T>>class stack{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}const T& top(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};

二,queue

1,queue的介绍

1,队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。

2,队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。

3,底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:

empty:检测队列是否为空

size:返回队列中有效元素的个数

front:返回队头元素的引用

back:返回队尾元素的引用

push_back:在队列尾部入队列

pop_front:在队列头部出队列

4,标准容器类 deque list 满足了这些要求。默认情况下,如果没有为 queue 实例化指定容器类,则使用标准容器 deque

2,queue 框架

template<class T, class Container = list<T>>class queue{public:private:Container _con;};

适配器 Container 可以转换成特定的容器;

3,push(const T& x)

尾插

void push(const T& x){_con.push_back(x);}

4,pop()

头删

void pop(){_con.pop_front();}

5,front()

返回队列头部的值

const T& front(){return _con.front();}

6,back()

返回队列尾部的值

const T& back(){return _con.back();}

7,size()

返回有效数据个数

size_t size(){return _con.size();}

8,empty()

判空

bool empty(){return _con.empty();}

9,queue 测试

void test_queue(){wxd::queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);while (!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;}

10,源代码

template<class T, class Container = list<T>>class queue{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_front();}const T& front(){return _con.front();}const T& back(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};

三,总结

我们就先搞一个大概的,其中还有很多分支,比如我们写的是擦除某个数据,其实也可以擦除某个范围,这些就靠大家去摸索,查阅文档了;

stack 和 queue 类的实现就到这里了;

加油!


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/94979.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 婆婆在我婚礼上跳钢管舞热门榜首_林昊婆婆周慧慧无错版_小说后续在线阅读_无删减免费完结_
  • 害我入狱,我成狱神后你们连跪都不配!独家番外_陆见秋柳盈盈新上_小说后续在线阅读_无删减免费完结_
  • 斗罗v:从逮到千仞雪偷窃开始成神完结版_陈晨胡列娜大反击_小说后续在线阅读_无删减免费完结_
  • 末世开火车,顺便捡了个机械神格高分神作_李昂诺亚独家首发_小说后续在线阅读_无删减免费完结_
  • 云清免费看_云舒小姐太后校园甜文_小说后续在线阅读_无删减免费完结_
  • 军训前,童养媳拿我的病历本给心上人叠纸飞机后,我退婚了完结爽文_杨鹤童养媳阿鹤一口气完结_小说后续在线阅读_无删减免费完结_
  • 未婚夫女兄弟把婚车改成宠物灵车,我反手让她的宾利变破烂最新阅读_魏成鸣乔诗诗林书妍小编推荐_小说后续在线阅读_无删减免费完结_
  • 军训当天男友为校花虐功勋犬,重生后我杀疯了潜力榜_顾野杜璇闻言大结局_小说后续在线阅读_无删减免费完结_
  • 天塌了!大佬们全被我捡回家了阿昭,小白,李惊雪小说整本+后续(阿昭,小白,李惊雪)清爽版阅读
  • 重生八零,我笑看真千金用土气布料卖港商免费阅读_妹妹姜雅沈俊爆款_小说后续在线阅读_无删减免费完结_
  • 秦昭:+后续人物讨喜无套路全集手握一把刀,砍翻万道!
  • 狸奴抓伤阿娘后,我和爹提议换个娘后续_阿爹阿娘宁王最新阅读_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1