网站和后台建设,站群管理,搭建外文网站,网站制作工作室stack 与 queuestackSTL 容器中 stack 的使用模拟实现 stackqueueSTL 容器中 queue 的使用模拟实现 queuestack
在数据结构中#xff0c;我们了解到#xff0c;stack 栈结构#xff0c;是一种先进后出的结构#xff0c;并且我们是使用顺序表来进行实现栈的操作的。
STL 容…
stack 与 queuestackSTL 容器中 stack 的使用模拟实现 stackqueueSTL 容器中 queue 的使用模拟实现 queuestack
在数据结构中我们了解到stack 栈结构是一种先进后出的结构并且我们是使用顺序表来进行实现栈的操作的。
STL 容器中 stack 的使用
C STL 中stack的基本操作有 代码测试练习
void test0()
{stackint s;s.push(1);s.push(2);s.push(3);s.push(4);cout size() s.size() endl;cout top s.top() endl;if (s.empty())cout s is empty! endl;elsecout s is not empty! endl;s.pop();s.pop();s.pop();cout size() s.size() endl;cout top s.top() endl;if (s.empty())cout s is empty! endl;elsecout s is not empty! endl;}模拟实现 stack
由于栈结构是“后进先出”的因此在进行栈模拟时候我们可以使用顺序结构来进行之前学习到 STL 容器中的 vector 容器是顺序结构的我们可以直接复用
namespace xx { //定义自己的命名空间templateclass T,class Containerstd::vectorT //定义模板类型class stack {public:stcak() //构造方法不需要写因为 Container 被定义为 vector 容器会自动进行构造方法的调用 {}void push(const T val){c.push_back(val); //使用 vector 容器的尾插方法}void pop(){if (empty())return ;c.pop_back(); //出队使用 vector 容器中的尾删操作-----------后进先出原则}T top(){return c.back(); //获取栈顶元素也就是最后一个入栈的元素------即复用 vector 容器中获取最后一个元素的方法}const T top()const{return c.back();}size_T size()const{return c.size(); //返回 vector 容器的大小}bool empty()const{return c.empty(); //判断 vector 容器是否为空}private:Container c; //定义 Container 为 vector 容器};}代码测试 queue
在数据结构中我们知道 queue 队列是一种先进先出的结构。
STL 容器中 queue 的使用
C STL 中queue的基本操作有 代码测试练习
void test1()
{queueint q;q.push(1);q.push(2);q.push(3);q.push(4);q.push(5);cout size() q.size() endl;cout front q.front() endl;cout back q.back() endl;q.pop();q.pop();q.pop();cout size() q.size() endl;cout front q.front() endl;cout back q.back() endl;if (q.empty())cout q is empty! endl;elsecout q is not empty! endl;q.pop();q.pop();if (q.empty())cout q is empty! endl;elsecout q is not empty! endl;}模拟实现 queue
队列是属于“先进先出”的结构在队尾进行元素的插入队头进行元素的删除操作因此为了避免头删而导致大量元素的移动操作我们避免使用顺序结构来实现队列故可以复用 list 链表结构来实现
namespace xx { //自定义命名空间templateclass T,class Containerstd::listT //定义模板类型class queue {public:queue() //构造方法会直接使用 list 方法的构造{}void push(const T val){//尾插q.push_back(val); //尾插------链表的尾插操作}void pop(){//头删if (empty())return; q.pop_front(); //队头出队----------链表的头删操作}T front(){return q.front(); //获取队头元素---------链表的首节点信息}const T front()const{return q.front(); }T back(){return q.back(); //获取队尾元素----------链表的尾节点信息}const T back()const{return q.back();}size_t size()const{return q.size(); //队中元素个数 -------- 链表中节点个数}bool empty()const{return q.empty(); //队列是否为空 ----------- 判断链表是否为空}private:Container q;};
}
代码测试 ps:
代码需要多练多理解今天的分享相对于来说还是比较简单的需要详细的 stack 和 queue 的实现可以参考数据结构中的讲解哦 — 添加链接描述
~今天的学习就到这里啦期待周末考试一切顺心鸭