資料結構與演算法 c 雙快取佇列

2022-02-01 06:31:41 字數 1548 閱讀 4017

「雙快取佇列」是我在一次開發任務中針對特殊場景設計出來的結構。使用場景為:傳送端持續向接收端傳送資料報——並且不理會接收端是否完成業務邏輯。由於接收端在任何情況下停止響應即可能產生資料丟失,因此無法簡單的設計一條執行緒安全佇列來對資料寫入或讀取(讀取資料時將佇列上鎖視為對寫入的停止響應)。

鑑於此,我的設計思路如下:

接收端首先向a佇列中寫入資料,然後當資料處理請求到來的時候切換到b佇列繼續寫入,之後將a佇列中的資料交給資料處理模組,處理完成以後a佇列資料清空。當下一次資料處理請求到來時,再將寫入請求切換回a佇列,並把b佇列中的資料提交給資料處理模組再清空佇列b,輪流作業。

有了思路以後,**就比較簡單了。

#include template

class

doublearray ;

intsize_a;

intsize_b;

node*header_a;

node*header_a_cur;

node*header_b;

node*header_b_cur;

inttrigger;

public

: doublearray() : size_a(

0), size_b(0), trigger(0), header_a(0), header_a_cur(0), header_b(0), header_b_cur(0

)

intpush(t t);

std::list

& fetch(std::list&list);

};template

int doublearray::push(t t)

else

if (size_b == 0 && trigger == 1

) else

}}template

std::list

& doublearray::fetch(std::list&list)

//delete a

temp =header_a;

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

size_a = 0

; header_a = 0

; header_a_cur = 0

; }

break

;

case1:

if (header_b != 0

) temp =header_b;

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

size_b = 0

; header_b = 0

; header_b_cur = 0

; }

break

; }

return

list;

}

注1:開發環境與ide分別為centos 7,netbeans 8.2

C 資料結構與演算法之雙快取佇列實現方法詳解

雙快取佇列 是我在一次開發任務中針對特殊場景設計出來的結構。使用場景為 傳送端持續向接收端傳送資料報 並且不理會接收端是否完成業務邏輯。由於接收端在任何情況下停止響應即可能產生資料丟失,因此無法簡單的設計一條執行緒安全佇列來對資料寫入或讀取 讀取資料時將佇列上鎖視為對寫入的停止響應 鑑於此,我的設計...

資料結構與演算法 雙端佇列

雙端佇列和普通佇列不同的地方是既可以隊首和隊尾進行插入,同時也就可以從隊首和隊尾進行remove刪除 同時不遵循先進先出或者先進後出的規則,這需要通過具體的演算法實現來確定,這個資料結構的實現過程如下 class deque def init self self.items defisempty s...

python資料結構與演算法 佇列與雙端佇列

雙端佇列 佇列 coding utf 8 deque 建立乙個空的雙端佇列 add front item 從隊頭加入乙個item元素 add rear item 從隊尾加入乙個item元素 remove front 從隊頭刪除乙個item元素 remove rear 從隊尾刪除乙個item元素 is...