資料結構(佇列)學習心得
1、佇列的定義:
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
佇列是一種先進先出(first in first out)的線性表,簡稱fifo. 允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。假設佇列是 q = (a1, a2, ….., an),如下圖所示:
佇列這種頭尾相接的順序儲存結構稱為迴圈佇列。(上圖認為佇列滿)
3、 如何判斷佇列滿還是空?
由於rear 可能比 front 大, 也可能比front小,所以儘管它們只相差乙個位置時就是滿的情況,但也可能是相差整整一圈。所以若佇列的最大尺寸為queuesize,那麼佇列滿的條件是(rear+1)%queuesize == front(取模「%」的目的就是為了整合rear 與 front 大小為乙個問題)
*通用的計算佇列長度公式為:
(rear - front + queuesize) % queuesize
4、迴圈佇列的**:
typedef
int qelemtype;
typedef
int status;
/*迴圈佇列的順序儲存結構*/
typedef
struct
sqqueue;
/*初始化乙個空佇列*/
status initqueue (sqqueue *q)
/*返回q的元素個數,也就是佇列當前長度*/
int queuelength (sqqueue q)
/*迴圈佇列的入佇列操作, 若佇列未滿,則插入元素e為q新的隊尾元素*/
status enqueue (sqqueue *q, qelemtype e)
q->data[q->rear] = e; /*將元素e賦值給隊尾*/
q->rear = (q->rear + 1) % maxsize; /*rear指標向後移一位置,*/
/*若到最後則轉到陣列頭部*/
return ok;
}/*若佇列不空, 則刪除q中隊頭元素, 用e返回其值*/
status dequeue (sqqueue *q, qelemtype e)
e = q->data[q->front]; /*將隊頭元素賦值給e*/
q->front = (q->front + 1) % maxsize; /*front 指標向後移一位置,若到最後則轉向陣列頭部*/
return ok;
}
資料結構學習心得(一)
計算機現在不在侷限於數字計算,更多應用於控制,管理及資料處理等非數值計算領域。這裡面涉及到兩個問題 資訊的表示,資訊的處理。分析待處理問題中的物件的特徵及個物件之間存在的關係,這既是資料結構這門課索要研究的問題。編寫解決實際問題的程式的一般過程 如何用資料形式描述問題?即由問題抽象出乙個適當的數學模...
資料結構學習心得總結
學習完成後,受益良多,也非常喜悅,非常開心,好像終於打了一場勝仗一樣!我打算將這乙個月的學習心得做乙個彙總,記錄下來。希望能給初學者帶來信心和經驗,能給大家分享這份快樂 剛開始打算學資料結構,是因為找工作面試的時候,很多公司都要求對資料結構有了解。沒辦法,我只有硬著頭皮學了。但是我沒有任何學習思路,...
資料結構學習心得系列(三)
本博文意在鞏固基礎知識,高手請繞過。部分 和內容參考嚴蔚敏人民郵電版出版社 資料結構 樹和二叉樹 樹樹 tree 是n n 0 個結點的有限集 t,在任意一棵非空樹中 有且僅有乙個特定的結點,稱為樹的根 root 當n 1 時,其餘結點可分為 m m 0 個互不相交的有限集 t1,t2,tm,其中每...