【数据结构与算法】哨兵
这里说的哨兵,是指对异常场景处理的一种优化。现对两种数组结构运用场景举例:
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;

浙公网安备 33010602011771号