资讯动态

C++~~~stack容器、queue容器、list容器(p45-P56)

发布时间:2026/8/21 7:01:09 来源:尧图企业网站定制
一、stack容器-基本概念1.stack是一种先进后出First in Last outFILO的数据结构它有一个出口。栈顶元素有push()、pop()、top等方法。栈中只有顶端的元素才可以被外界使用所以栈不允许有遍历操作。栈可以判断容器为空empty()栈可以返回元素的个数size()。2.栈中只有顶端元素才可以被外界使用所以栈不允许有遍历操作。栈中进入数据成为入栈push),栈中弹出元素数据称为出栈pop)3.stack常用接口功能描述栈容器常用的对外接口//构造函数stackTstk;//stack采用模版类实现stack对象的默认构造形式stack(conststackstk);//拷贝构造函数//赋值操作stackoperatorconststackstk);//重载等号操作符//数据存取push(elem);//向栈顶添加元素pop();//从栈顶移除第一个元素top();//返回栈顶元素//大小操作empty();//判断栈是否为空size();//返回栈的大小4.代码实现#includeiostream#includestack#includealgorithm//标准算法的头文件usingnamespacestd;voidtest(){//特点符合先进后出stackints;//入栈s.push(10);s.push(20);s.push(30);s.push(40);coutbefore stack pop,stack size is:s.size()endl;//只要栈不为空查看栈顶并且执行出栈操作while(!s.empty()){//查看栈顶coutstack top element:s.top()endl;//出栈s.pop();}coutAfter stack pop,stack size is:s.size()endl;}intmain(){test();}//输出before stack pop,stack size is:4stack top element:40stack top element:30stack top element:20stack top element:10After stack pop,stack size is:0二、queue容器1.概念queue容器是一种先进先出First in first outFIFO的数据结构它有两个出口。队列容器允许从一端新增数据从另一端移除数据。队列中只有队头和队尾元素可以被外界使用因此队列不允许有遍历操作。队列中进数据称为–入队push队列中出数据成为—出队pop)队头front可以出队pop。队尾back可以入队push。2.函数原型//构造函数queueTque;//queue采用模版类实现queue对象的默认构造形式queue(constqueueque);//拷贝构造函数//赋值操作queueoperatorconstqueueque//重载等号操作符//数据存取push(elem);//队尾添加元素pop();//从队头移除第一个元素back();//返回最后一个元素front();//返回第一个元素//大小操作empty();//判断堆栈是否为空size();//返回栈的大小3.代码实现//队列容器--queue#includeiostream#includequeue#includealgorithm//标准算法的头文件usingnamespacestd;//队列queueclassPerson{public:Person(string name,intage){this-m_Namename;this-m_Ageage;}string m_Name;intm_Age;};voidtest(){//创建队列queuePersonq;//准备数据初始化Personp1(唐僧,30);Personp2(孙悟空,20);Personp3(猪八戒,10);Personp4(沙和尚,50);//入队q.push(p1);q.push(p2);q.push(p3);q.push(p4);coutqueue size is:q.size()endl;//判断只要队列不为空查看队头查看队尾做出队的操作while(!q.empty()){//查看队头元素coutqueue head element name:q.front().m_Namequeue head element age:q.front().m_Ageendl;//查看队尾元素coutqueue tail element name:q.back().m_Namequeue tail element age:q.back().m_Ageendl;//出队q.pop();}}intmain()## 标题{test();}//输出queue size is:4queue head element name:唐僧queue head element age:30queue tail element name:沙和尚queue tail element age:50queue head element name:孙悟空queue head element age:20queue tail element name:沙和尚queue tail element age:50queue head element name:猪八戒queue head element age:10queue tail element name:沙和尚queue tail element age:50queue head element name:沙和尚queue head element age:50queue tail element name:沙和尚queue tail element age:50总结入队–push出队–pop返回队头元素—front返回队尾元素—back判断队伍是不是为空–empty返回队列大小–size。三、list基本容器–list基本概念1.功能将数据进行链式存储。链表list)是一种无力存储单元上非连续的存储结构数据元素的逻辑顺序是通过链表中的指针链接实现的。2.链表的组成链表是由一系列节点组成。3.节点的组成一个是存储数据元素的数据域另一个是存储下一个节点地址的指针域。4.STL中的链表是一个双向循环链表。所以list可以在头部进行插入和删除比如push_front(),pop_front()。也可以在尾部进行插入和删除比如push_back(),pop_back().5.链表的优点可以对任意位置进行快速插入和删除元素。链表的缺点链表对容器的遍历速度没有数组快。链表占用的空间比数组占用的空间大。6.由于链表的存储方式不是连续的内存空间所以链表的list中的迭代器只支持前移和后移属于双向迭代器。list优点1采用动态存储分配不会造成内存浪费和溢出。2链表执行插入和删除操作十分方便修改指针即可不需要移动大量元素。list缺点1链表灵活但是空间指针域和时间遍历额外耗费较大。List有个重要性质插入操作和删除操作都不会造成原有list迭代器的失效这在vector是不成立的。总结STL中的list和vector是2个常用的容器各有优缺点。四、list容器–构造函数1.功能创建list容器2.函数原型//list采用模版类实现对象的默认构造形式listTlist;//构造函数将[beg,end)区间中的元素拷贝给本身list(beg,end);//构造函数将n个elem拷贝给本身list(n,elem);//拷贝构造函数list(constlistlist);3.代码实现// list容器#includeiostream#includelist#includealgorithm//标准算法的头文件usingnamespacestd;voidprintList(constlistintL){for(listint::const_iterator itL.begin();it!L.end();it){cout*it ;}coutendl;}voidtest(){listintL1;//默认构造函数L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//遍历容器printList(L1);//区间方式构造listintL2(L1.begin(),L1.end());printList(L2);//拷贝构造函数listintL3(L2);printList(L3);//n个elemlistintL4(10,10000);printList(L4);}intmain(){test();return0;}//输出10203040102030401020304010000100001000010000100001000010000100001000010000五、list容器–赋值和交换1.功能描述给list容器进行复制以及交换list容器2.函数原型//将[beg,end)区间中的数据拷贝给本身assign(beg,end)//讲n个elem拷贝赋值给本身assign(n,elem);//重载等号操作符listoperatorconstlistlist);//将list与本身元素互换swap(list);3.代码实现// list容器赋值和交换#includeiostream#includelist#includealgorithm//标准算法的头文件usingnamespacestd;voidprintList(constlistintL){for(listint::const_iterator itL.begin();it!L.end();it){cout*it ;}coutendl;}//赋值voidtest(){listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);printList(L1);//等号赋值listintL2;L2L1;printList(L2);//区间赋值listintL3;L3.assign(L2.begin(),L2.end());printList(L3);listintL4;L4.assign(10,100);printList(L4);}//交换voidtest02(){listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);listintL2;L2.assign(10,100);coutBefore swap:endl;printList(L1);printList(L2);L1.swap(L2);coutAfter swap:endl;printList(L1);printList(L2);}intmain(){test02();}//输出Before swap:10203040100100100100100100100100100100After swap:10010010010010010010010010010010203040

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价