資料結構與演算法 哨兵

2022-10-09 07:12:09 字數 670 閱讀 3888

這裡說的哨兵,是指對異常場景處理的一種優化。現對兩種陣列結構運用場景舉例:

1.陣列:

對乙個無重複資料的陣列中查詢已知值的位置。

void findbykey(char *a, int n, int key){

int i = 0;

for(;a[i] != key; i++){ 

if(i = n - 1) return -1;

return i;

可改為 

void findbykey(char *a, int n, int key){

int i = 0;

int a[n-1] = key;

for(;a[i] !=key;i++){

if(n -1 == i){

return - 1;

else{

return i;

將key 作為哨兵,解決了特殊場景:key不在陣列中,並且優化了遍歷的效率。

2.鍊錶:

對於鍊錶,哨兵是為了解決空鍊錶刪除場景、首節點新增場景。我們將鍊錶首節點的head->next = 哨兵位址,這個哨兵沒有資料。

這樣我們在刪除的時候: p->next = p->next->next;

我們在新增的時候:new->next = p->next;

p->next = new;

資料結構 哨兵作用

應用 假設乙個亂序陣列,需要查詢乙個元素是否在該陣列中,這時需要用到順序查詢,也就是遍歷陣列。一般情況下我們會寫下如下 cpp view plain copy print int sequential search int a,intn,intkey return 0 查詢失敗 有的資料結構書上,會...

演算法 資料結構 鍊錶和哨兵節點

鍊錶是一種基礎的資料結構,但對於一些初學者來說,實現乙個鍊錶還是比較困難的,許多操作作用在頭部或尾部時需要特殊處理。比如下面這段 template typename t void linkedlist remove linkedlistnode node 上述 進行了兩次的空值判斷,有可能會更新煉表...

資料結構與演算法 演算法 演算法和資料結構

資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...