⑴ java中的隊列都有哪些,有什麼區別
阻塞隊列、普通隊列,非阻塞隊列。
阻塞隊列與普通隊列的而區別在於,當隊列是空時,從隊列中獲取元素的操作會被阻塞,或則當隊列是滿的時,往隊列中增加元素會被阻塞,試圖從空的隊列中取元素的線程或從滿的隊列中添加元素的線程同樣會被阻塞。
⑵ java 隊列
java類庫有Queue類,但是如果樓主想自己定義隊列的話,可以模仿C++指針定義隊列的方式。java和C#雖然沒有指針,但是它們的對象默認都是傳引用的,也就像指針傳遞地址一樣,呵呵。
⑶ JAVA中隊列和棧的區別
隊列(Queue):是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表;
棧(Stack):是限定只能在表的一端進行插入和刪除操作的線性表。
區別如下:
一、規則不同
1. 隊列:先進先出(First In First Out)FIFO
2. 棧:先進後出(First In Last Out )FILO
二、對插入和刪除操作的限定不同
1. 隊列:只能在表的一端進行插入,並在表的另一端進行刪除;
2. 棧:只能在表的一端插入和刪除。
三、遍歷數據速度不同
1.
隊列:基於地址指針進行遍歷,而且可以從頭部或者尾部進行遍歷,但不能同時遍歷,無需開辟空間,因為在遍歷的過程中不影響數據結構,所以遍歷速度要快;
2.
棧:只能從頂部取數據,也就是說最先進入棧底的,需要遍歷整個棧才能取出來,而且在遍歷數據的同時需要為數據開辟臨時空間,保持數據在遍歷前的一致性。
⑷ 跪求用JAVA語言實現一個棧和一個隊列,數據元素為double型。。。具體在問題補充里
publicinterfaceMyStack<T>{
/**
*判斷棧是否為空
*/
booleanisEmpty();
/**
*清空棧
*/
voidclear();
/**
*棧的長度
*/
intlength();
/**
*數據入棧
*/
booleanpush(Tdata);
/**
*數據出棧
*/
Tpop();
}
publicclassMyArrayStack<T>implementsMyStack<T>{
privateObject[]objs=newObject[16];
privateintsize=0;
@Override
publicbooleanisEmpty(){
returnsize==0;
}
@Override
publicvoidclear(){
//將數組中的數據置為null,方便GC進行回收
for(inti=0;i<size;i++){
objs[size]=null;
}
size=0;
}
@Override
publicintlength(){
returnsize;
}
@Override
publicbooleanpush(Tdata){
//判斷是否需要進行數組擴容
if(size>=objs.length){
resize();
}
objs[size++]=data;
returntrue;
}
/**
*數組擴容
*/
privatevoidresize(){
Object[]temp=newObject[objs.length*3/2+1];
for(inti=0;i<size;i++){
temp[i]=objs[i];
objs[i]=null;
}
objs=temp;
}
@SuppressWarnings("unchecked")
@Override
publicTpop(){
if(size==0){
returnnull;
}
return(T)objs[--size];
}
@Override
publicStringtoString(){
StringBuildersb=newStringBuilder();
sb.append("MyArrayStack:[");
for(inti=0;i<size;i++){
sb.append(objs[i].toString());
if(i!=size-1){
sb.append(",");
}
}
sb.append("]");
returnsb.toString();
}
}
//棧的鏈表實現
publicclassMyLinkedStack<T>implementsMyStack<T>{
/**
*棧頂指針
*/
privateNodetop;
/**
*棧的長度
*/
privateintsize;
publicMyLinkedStack(){
top=null;
size=0;
}
@Override
publicbooleanisEmpty(){
returnsize==0;
}
@Override
publicvoidclear(){
top=null;
size=0;
}
@Override
publicintlength(){
returnsize;
}
@Override
publicbooleanpush(Tdata){
Nodenode=newNode();
node.data=data;
node.pre=top;
//改變棧頂指針
top=node;
size++;
returntrue;
}
@Override
publicTpop(){
if(top!=null){
Nodenode=top;
//改變棧頂指針
top=top.pre;
size--;
returnnode.data;
}
returnnull;
}
/**
*將數據封裝成結點
*/
privatefinalclassNode{
privateNodepre;
privateTdata;
}
}