最近學習linux,講到了程序執行緒這一方面的內容,其中最重要的程序排程演算法,有乙個時間片輪轉排程演算法,怎麼也搞不懂,聽其他同學說可以從棧和佇列這一方面去理解,所以我又回來重新複習了一下棧與佇列的基本知識,相較於剛學棧與佇列的時候,現在又有了新的理解。使用的教材是《演算法導論》。
在這一章的內容中引入了動態集合的內容,那麼什麼是動態集合呢?書中的原話是這樣的,如同在數學中一樣,集合也是電腦科學的基礎,不過數學中的集合是不變的,而演算法所操作的集合是可以隨時間的改變而增大、縮小或產生其他的變化,這就是動態集合。而棧與佇列就是這樣的動態集合。我對這句話的理解是,在數學中,集合是固定長度的,例如c=。如果我沒記錯的話就是乙個集合,他只有6個數,而且內容也是固定的,而演算法所操作的集合是可以隨實際情況與需求來改變其內容與大小的。我姑且也就先這麼理解的,雖然自己心裡也沒底。然後是主要內容,是用陣列的形式來實現棧與佇列:
棧。1、特點:後進先出(先刪除存留時間短的元素);
與其說後進先出、先進後出,我覺得先刪除存留時間短的元素更加好理解,因為前乙個說法很容易讓我搞混,腦子要想好久才能轉過來。當然有很多關於棧的生活中的例子,太多太多,如電梯,一摞盤子的使用等。
2、專用語:insert操作叫push(壓入),delete操作叫pop(彈出);s[1...n]表示乙個至多有n個元素的棧;top[s]表示指向棧頂元素的指標;
s[1...top[s]]表示由s實現的棧包含的所有的元素,注意與s[1...n]區分,棧的容量有n這麼大,但是不一定填滿,其中已經填入的部分就用s[1...top[s]]來表示;
s[1]表示棧底;s[top[s]]表示棧頂元素。s[0]沒有元素。
3、操作:
stack-empty:判斷棧是否為空。思路:top[s]=0時表示棧中沒有元素,此時棧s是空棧。
push:將元素壓入棧中。思路:將top[s]指標向上移一位,向top[s]中插入元素。但是還有一種情況,當top[s]=n時,表示棧已經達到最大索引位置,此時若再插入元素,會造成棧的上溢。應當對這一種情況做出相應處理。
pop:將元素從棧中探出。思路:將top[s]指標向下移一位即可。還有一種情況,當top[s]=0時,棧中已經沒有元素了,此時若再彈出元素,會造成棧的下溢。
佇列1、特點:先進先出(先刪除存留時間最長的元素)。這個就很好想了,生活中的例子也很多,最典型的就是排隊打飯的情況,當然不將插隊考慮在內。
2、專用語:insert操作叫入隊(enqueue),delete操作叫出隊(dequeue);
q[1...n]乙個至多含有n-1個的元素佇列;head[q]代表佇列的頭,元素出隊的地方;tail[q]代表佇列的尾,是新元素插入的地方。
3、說明:佇列的首尾連成乙個環,其中各個元素用head[q]、head[q]+1、。。。tail[q]-1來表示;當head[q]=tail[q]時隊列為空(tail[q]沒有元素),當head[q]=tail[q]+1時隊列為滿的。我覺的這個地方不太好想,別忘了這四個前提:head[q]、tail[q]代表索引,佇列是乙個環,只能從tail[q]插入元素,tail[q]沒有元素。有了這幾個前提還不會的話就在這幾個前提之下畫乙個圖,陣列的就可以。
4、操作:
enqueue:從tail[q]處插入元素,再將tail[q]移向下乙個位置;注意處理其他情況,就是佇列已滿的情況,tail[q]+1=head[q]。
dequeue:將head[q]移向下乙個位置;注意溢位情況處理,head[q]=tail[q],此時不能再彈出元素。
以上就是棧與佇列的我所了解的內容,要我說佇列有些人性化,誰等的久先讓誰出,而棧就有些流氓了,誰先進來讓誰先出去,人家等的久的就讓他等著。當然這也是取決於這兩種結構的特點,棧只有乙個頭控制元素的進出,而佇列有乙個頭管出元素,乙個尾管進元素,這樣的結構決定了他們這樣的特點。、
小白日記,歡迎批評。
資料結構 棧與佇列
題目 1.編寫函式,採用鏈式儲存實現棧的初始化 入棧 出棧操作 2.編寫函式,採用順序儲存實現棧的初始化 入棧 出棧操作 3.編寫函式,採用鏈式儲存實現佇列的初始化 入隊 出隊操作 4.編寫函式,採用順序儲存實現佇列的初始化 入隊 出隊操作 5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯...
資料結構 棧與佇列
棧的原則是後進先出,即插入與刪除元素均在棧頂進行。獲取棧頂元素 s.top 佇列的原則是先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行。獲取隊頭元素 q.front 思路 用兩個棧,乙個棧用來進隊,乙個棧用來出隊,當資料進入佇列的時候,我們將其壓入乙個棧,當資料出隊的時候,我們將儲存在棧內的資料...
資料結構 棧與佇列
1.順序棧 基本操作 typedef int elemtype 定義 順序棧 typedef struct sqstack 判空 bool stackempty sqstack s 進棧 bool push sqstack s elemtype x 出棧操作 bool pop sqstack s e...