C++之队列的实现及各种
一、學(xué)習(xí)要點(diǎn):
1.隊(duì)列的特點(diǎn):
a.先進(jìn)先出
b.插入只能從隊(duì)尾插入
c.刪除只能從對(duì)頭刪除
d.雙向操作
2.隊(duì)頭指針與隊(duì)尾指針的區(qū)別,隊(duì)頭指針指向?qū)嶋H隊(duì)首,還是隊(duì)首空位,以及隊(duì)尾指針是指向?qū)嶋H隊(duì)尾,還是實(shí)際隊(duì)尾的下一個(gè)空位都是事先約定的,之所以這樣,是因?yàn)槿绻?duì)首和隊(duì)尾都指向?qū)嶋H指針時(shí),當(dāng)隊(duì)列為空和隊(duì)列為1個(gè)元素時(shí),隊(duì)首指針和隊(duì)尾指針完全一樣,故其中必有一個(gè)指向?qū)嶋H隊(duì)尾的后一位。
3.隊(duì)列為滿時(shí),隊(duì)列的最后一位必為空,而且不存放元素。
4.隊(duì)列和棧一樣是一種線性結(jié)構(gòu),其底層基礎(chǔ)都是線性數(shù)組和鏈表,基于數(shù)組隊(duì)列的缺點(diǎn)是由于一端插入一端刪除,當(dāng)不斷從頭部刪除數(shù)據(jù),頭部會(huì)大量留有空閑內(nèi)存,無(wú)法插入,造成空間流失,如果將隊(duì)頭指針在每次刪除之后往前移動(dòng)一個(gè)位置,這是一個(gè)時(shí)間復(fù)雜度為O(n)的操作.為解決這個(gè)要么空間浪費(fèi)要么時(shí)間浪費(fèi)的問(wèn)題,使用循環(huán)隊(duì)列,所謂循環(huán)隊(duì)列,是將一個(gè)數(shù)組看出首尾相連的圓環(huán),刪除元素時(shí)將隊(duì)首標(biāo)志往后移動(dòng),添加元素時(shí)若數(shù)組尾部已經(jīng)沒(méi)有空間,則考慮數(shù)組頭部的空間是否空閑,如果是,則在數(shù)組頭部插入。
二、代碼:
demo092003.cpp
調(diào)用代碼:
#include<iostream> #include<stdlib.h> #include<string> #include"demo092303.cpp"; using namespace std; int main(){Loopqueque<string> queque(6);queque.push("one");queque.push("two");queque.push("three");queque.push("four");queque.push("five");cout<<"隊(duì)列長(zhǎng)度:"<<queque.size()<<endl;cout<<queque.isFull()<<endl;while(!queque.isEmpty()){queque.pop;}cout<<queque.isEmpty()<<endl;system("pause");return 0; }三、運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的C++之队列的实现及各种的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 编写一个算法frequency,统计在一
- 下一篇: C++之链表中头指针、头节点、首元结点的