【数据结构与算法】哨兵

这里说的哨兵,是指对异常场景处理的一种优化。现对两种数组结构运用场景举例:

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.链表:

对于链表,哨兵是为了解决空链表删除场景、首节点添加场景。我们将链表首节点换成哨兵,哨兵->next = head,这个哨兵没有数据。

这样我们在删除的时候: p->next = p->next->next;

我们在添加的时候:new->next = p->next;

                               p->next = new;

 

posted @ 2022-03-28 17:33  星星客  阅读(330)  评论(0)    收藏  举报