一、隊(duì)列和棧有什么區(qū)別?
隊(duì)列(Queue):是限定只能在表的一端進(jìn)行插入和在另一端進(jìn)行刪除操作的線性表;
棧(Stack):是限定只能在表的一端進(jìn)行插入和刪除操作的線性表。
區(qū)別如下:
a)規(guī)則不同
1. 隊(duì)列:先進(jìn)先出(First In First Out)FIFO
2. 棧:先進(jìn)后出(First In Last Out )FILO
b)對插入和刪除操作的限定不同
1. 隊(duì)列:只能在表的一端進(jìn)行插入,并在表的另一端進(jìn)行刪除;
2. 棧:只能在表的一端插入和刪除。
c)遍歷數(shù)據(jù)速度不同
1. 隊(duì)列:基于地址指針進(jìn)行遍歷,而且可以從頭部或者尾部進(jìn)行遍歷,但不能同時(shí)遍歷,
無需開辟空間,因?yàn)樵诒闅v的過程中不影響數(shù)據(jù)結(jié)構(gòu),所以遍歷速度要快;
2. 棧:只能從頂部取數(shù)據(jù),也就是說最先進(jìn)入棧底的,需要遍歷整個(gè)棧才能取出來,而且
在遍歷數(shù)據(jù)的同時(shí)需要為數(shù)據(jù)開辟臨時(shí)空間,保持?jǐn)?shù)據(jù)在遍歷前的一致性。
二、你常用的cocos2d-x工具有哪些?
TiledMap (地圖編輯器)ParticleEditor(粒子編輯器)
cocosBuilder(可視化編輯)Texture Packer(圖片組合工具)
plistEditor工具等
三、分別寫出int、float、BOOL、指針類型的變量,與“零”值的比較語句。
BOOL : if ( !a ) or if(a)
int : if ( a == 0)
float : const EXPRESSION EXP = 0.000001
<span style="white-space:pre"> </span>if ( a < EXP&& a >-EXP)
pointer : if ( a != NULL) or if(a == NULL)
不可將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”此類形式。
EPSINON(精度)應(yīng)該是一個(gè)很小的值吧 因?yàn)橛?jì)算機(jī)在處理浮點(diǎn)數(shù)的時(shí)候是有誤差的,所以判斷兩個(gè)浮點(diǎn)數(shù)是不是相同,是要判斷是不是落在同一個(gè)區(qū)間的,這個(gè)區(qū)間就是 [-EPSINON,EPSINON] EPSINON一般很小,10的-6次方以下吧,具體的好像不確定的,和機(jī)器有關(guān)。
剖析:
考查對0值判斷的“內(nèi)功”,BOOL型變量的0判斷完全可以寫成if(var==0),而int型變量也可以寫成if(!var),指針變量的判斷也可以寫成if(!var),上述寫法雖然程序都能正確運(yùn)行,但是未能清晰地表達(dá)程序的意思。
一般的,如果想讓if判斷一個(gè)變量的“真”、“假”,應(yīng)直接使用if(var)、if(!var),表明其為“邏輯”判斷;如果用if判斷一個(gè)數(shù)值型變量(short、int、long等),應(yīng)該用if(var==0),表明是與0進(jìn)行“數(shù)值”上的比較;而判斷指針則適宜用if(var==NULL),這是一種很好的編程習(xí)慣。
注意:
浮點(diǎn)型變量并不精確,所以不可將float變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法成“>=”或“<=”形式。如果寫成if(x == 0.0),則判為錯(cuò),得0分。