資料結構與演算法 棧和佇列

2021-08-15 20:12:00 字數 2133 閱讀 5608

棧:是限制在表的一端進行插入和刪除運算的線性表。棧又稱後進先出簡稱lifo表

佇列:也是一種運算受限的線性表。它只允許在標的一端進行插入,而在另一端進行刪除。佇列亦稱先進先出fifo表

1. 棧與佇列的區別

(1)佇列先進先出,棧先進後出。

(2)對插入和刪除操作的」限定」。 棧是限定只能在表的一端進行插入和刪除操作的線性表。 佇列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。 從」資料結構」的角度看,它們都是線性結構,即資料元素之間的關係相同。但它們是完全不同的資料型別。除了它們各自的基本操作集不同外,主要區別是對插入和刪除操作的」限定」。 棧和佇列是在程式設計中被廣泛使用的兩種線性資料結構,它們的特點在於基本操作的特殊性,棧必須按」後進先出」的規則進行操作,而佇列必須按」先進先出」 的規則進行操作。和線性表相比,它們的插入和刪除操作受更多的約束和限定,故又稱為限定性的線性表結構。

(3)遍歷資料速度不同。棧只能從頭部取資料 也就最先放入的需要遍歷整個棧最後才能取出來,而且在遍歷資料的時候還得為資料開闢臨時空間,保持資料在遍歷前的一致性佇列怎不同,他基於位址指標進行遍歷,而且可以從頭或尾部開始遍歷,但不能同時遍歷,無需開闢臨時空間,因為在遍歷的過程中不影像資料結構,速度要快的多

2. 棧

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

public

class

arraystack

//判斷是否為空棧

public

boolean

isempty()

//入棧

public

void

push(object x)

array[++topofstack]=x;

}//出棧

public object pop() throws exception

return array[topofstack--];

}//檢視棧頂元素

public object top() throws exception

return array[topofstack];

}//容量擴充套件的實現方式

private

void

doublearray()

array=newarray;

}}

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

3. 佇列

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

public

class arrayqueue

public

void

enqueue(object obj)

rear = ++rear % size;

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

nitems++;

/* if(rear == size-1)

a[++rear] = value;

*/ }

public object delqueue()

nitems--;

front = front % size;

return a[front++];

}public

void

display()

int item = front;

for(int i = 0; i < nitems; i++)

system.out.println("");

}public object peek()

return a[front];

}public boolean isfull()

public boolean isempty()

public

intsize()

}

資料結構與演算法 棧和佇列

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

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

佇列是一種先進先出 fifo 的資料結構,從隊尾進,從隊頭出 在 fifo 資料結構中,將首先處理新增到佇列中的第乙個元素。如上圖所示,佇列是典型的 fifo 資料結構。插入 insert 操作也稱作入隊 enqueue 新元素始終被新增在佇列的末尾。刪除 delete 操作也被稱為出隊 deque...

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

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