寫演算法時頭腦要清晰,在頭腦中高速抽象分析,一般都會用迴圈或遞迴思想來完成。
1 定義規則;
2 確定邊界條件;
3 每一步的具體操作和細節注意;
例如:c實現迴圈佇列
分析如下:
肯定有迴圈操作,要考慮佇列空或者滿,還有越邊界等情況,要迅速準確完成程式必須定義規則,無規矩無以成方圓。
1 head和tail兩個標量的定義:
存放資料時:head 指向當前為空且即將寫入資料的節點,寫完後自加加;
提取資料時;tail 指向已彈出資料的節點,將下一節點的資料提取後自加加;
2 邊界條件:
隊列為空時,提取操作需判斷tail下一節點是否為head。若是,則違背了head指向當前為空的節點的規則
隊列為滿時,存放操作需判斷head是否等於tail,若等於這違背了tail指向已彈出資料的節點的規則;
3 操作細節:
或者每次操作前判斷資料操作越界與否,如果還有其他判斷則推薦使用上者。
具體實現如下:
歸入正題:實現可讀寫併發,需要滿足乙個寫執行緒在執行至pushque函式內任意語句時發生執行緒切換,切換至另一讀執行緒呼叫popque函式執行,然後恢復至原執行緒pushque執行,佇列內部不發生錯誤。迴圈單鏈表實現。
用熟乙個好的ide是多麼的重要啊!
一種讀寫可併發進行的佇列的實現方法
一.1 背景 目前採用多執行緒的處理機制中,如下處理方式是比較常見的 乙個執行緒負責將上游資料放到乙個公共佇列中,另外乙個執行緒從公共佇列中取出資料進行處理。讀取操作都需要共用乙個互斥量來保證執行緒安全,這樣寫資料和取資料的操作實際上是序列的,有些時候,這個操作將對軟體處理效能造成一定影響。如果我們...
佇列的一種實現 迴圈佇列
佇列的一種實現,迴圈佇列,通過使用固定長度陣列及首尾指標實現佇列的入隊 出隊等 class circularqueue 元素入隊,成功則返回true,否則false param value return public boolean put t value if isempty true tail ...
迴圈佇列一種實現
queue實現方式有兩種 陣列和鍊錶,本文屬於陣列實現,為了防止佇列出現 明明還有儲存空間,但是卻提示佇列已滿 的情況,故使用迴圈佇列 include include define max size 5 typedef struct qnode squeue,squeueptr void init ...