資料結構與演算法02 之棧與佇列

2021-09-30 13:50:06 字數 2493 閱讀 6519

棧的主要機制可以用陣列來實現,也可以用鍊錶來實現,下面用陣列來實現棧的基本操作:

public

class

arraystack   

public

void

push(

long

value)   

a[++top] = value;  

}  public

long

peek()   

return

a[top];  

}  public

long

pop()   

return

a[top--];          

}  public

intsize()   

public

boolean

isempty()   

public

boolean

isfull()   

public

void

display()   

system.out.println(""

);  

}  }  

資料項入棧和出棧的時間複雜度均為o(1)。這也就是說,棧操作所消耗的時間不依賴於棧中資料項的個數,因此操作時間很短。棧不需要比較和移動操作。

佇列也可以用陣列來實現,不過這裡有個問題,當陣列下標滿了後就不能再新增了,但是陣列前面由於已經刪除佇列頭的資料了,導致空。所以佇列我們可以用迴圈陣列來實現,見下面的**:

public

class

roundqueue   

public

void

insert(

long

value)   

rear = ++rear % size;  

a[rear] = value; //尾指標滿了就迴圈到0處,這句相當於下面注釋內容      

nitems++;  

/*      if(rear == size-1)

a[++rear] = value;

*/}  

public

long

remove()   

nitems--;  

front = front % size;  

return

a[front++];  

}  public

void

display()   

intitem = front;  

for(

inti = 

0; i < nitems; i++)   

system.out.println(""

);  

}  public

long

peek()   

return

a[front];  

}  public

boolean

isfull()   

public

boolean

isempty()   

public

intsize()   

}  

和棧一樣,佇列中插入資料項和刪除資料項的時間複雜度均為o(1)。

還有個優先順序佇列,優先順序佇列是比棧和佇列更專用的資料結構。優先順序佇列與上面普通的佇列相比,主要區別在於佇列中的元素是有序的,關鍵字最小(或者最大)的資料項總在隊頭。資料項插入的時候會按照順序插入到合適的位置以確保佇列的順序。優先順序佇列的內部實現可以用陣列或者一種特別的樹——堆來實現。堆可參考第8節內容。這裡用陣列實現優先順序佇列。

public

class

priorityqueue   

public

void

insert(

long

value)   

intj;  

if(nitems == 

0)   

else

else

}  a[j+1

] = value;  

nitems++;  

}  }  

public

long

remove()   

return

a[--nitems];  

}  public

long

peekmin()   

public

boolean

isfull()   

public

boolean

isempty()   

public

intsize()   

public

void

display()   

system.out.println(" "

);  

}  }  

這裡實現的優先順序佇列中,插入操作需要o(n)的時間,而刪除操作則需要o(1)的時間。在第8節裡將介紹堆來改進插入操作的時間。

資料結構與演算法02 之棧與佇列

棧的主要機制可以用陣列來實現,也可以用鍊錶來實現,下面用陣列來實現棧的基本操作 public class arraystack public void push long value a top value public long peek return a top public long pop ...

資料結構與演算法 棧 02

棧 先進後出 陣列來實現棧的基本操作 author fancy date 2018 12 05 09 31 public class arraystack 壓入資料 author fancy param value public void push int value array topindex ...

資料結構與演算法(棧與佇列)

棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,他的特點在於只能允許在容器的一端 稱為棧頂端指標,英語top 進行加入資料 英語push 和輸出資料 英語pop 的運算。沒有了位置概念,保證任何時候可以訪問 刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問...