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

2022-09-28 02:00:12 字數 1432 閱讀 1776

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

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

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

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

#include

template

class doublearray ;

int size_a;

int size_b;

node* header_a;

node* header_a_cur;

node* header_b;

node* header_b_cur;

int trigger;

public:

doublearray()程式設計客棧 : size_a(0), size_b(0), trigger(0), header_a(0), header_a_cur(0), header_b(0), header_b_cur(0)

int push(t t);

std::list& fetch(std::list& list);

};template&l程式設計客棧t;typename t>

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;

case 1:

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;

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

本文標題: c++資料結構與演算法之雙快取佇列實現方法詳解

本文位址: /ruanjian/c/201223.html

資料結構與演算法 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...