静态查找表 哨兵的使用与一般的对比(简化版)

来源:互联网 发布:yum 不支持python 2.7 编辑:程序博客网 时间:2024/06/05 19:50
#include <iostream.h>
#include<stdlib.h>
#define ok 1
#define N 3
#define overflow 0
typedef struct 
{
int *elem;
int length;
}sstable;


int initlist(sstable &l)
{
l.elem=(int*)malloc(N*sizeof(int));
if(!l.elem)  exit(overflow);
return ok;


}


int search(sstable st,int key)
{
int i=N-1;
st.elem[0]=key;
while(st.elem[i]!=key)
{
i--;
}
return i;


}


void main()
{
int a,i;
sstable st;
    initlist(st);
for(i=1;i<N;i++) cin>>st.elem[i];

cout<<"你想查找的数字是";
cin>>a;
cout<<"位置在"<<search(st,a);

}



程序用于说明问题可能比较简单但是个人水平确实低,在刚开始写的时候有好多错误 


其实最重要的还是那个 search函数的i值是等于N-1,因为数组的下标是和数字不对应的,以一个是a【0】

同时 for(i=1;i<N;i++) cin>>st.elem[i];  这里不能=N,只能小于,例如这里本来只有三个窗口值,现在a【o】又成了哨兵占据第一位,也就是三个东西只需要弄出两个东西就好了 


那么问题又来了 本来我是定义N为6 但是系统只让我输入五个数字 



怎样解决这个问题 

l.elem=(int*)malloc((N+1)*sizeof(int));  只要写成N+1  然后for(i=1;i<=N;i++) cin>>st.elem[i]; 加上个等于号就好了






哨兵的作用 对比一下 如果是一般的程序 大概是这样的

for(int i=1;i<=n;i++)

  {

     if(a[i]==key)

      return i;

}

也就是每一次都需要比较那个i<n;  加了哨兵之后就。。。。。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 沪剧杨飞飞经典唱段 沪剧一号机密 沪剧雷雨幽会 沪剧叛逆女性花园会 沪剧雷雨mp3下载 沪剧芦苇疗养院原唱 沪剧名段mp3下载 沪剧名段欣赏 沪剧雷雨全场 沪剧叛逆的女性 沪剧罗汉钱回忆 沪剧思念亲人 阿必大回娘家沪剧全集 孙徐春茅善玉沪剧唱段 为你打开一扇窗沪剧 杨乃武与小白菜沪剧 沪士电子 沪士电子化注册登录 昆山沪士电子怎么样 沪士电子股票 沪士电子招聘 沪洲 沪州老窖 沪州 沪州老窖酒价格表52度价格 沪州老窖42度价格表 百年沪州老窖窖龄60年多少钱 沪州特曲52度价格表 百年沪州老窖30年 沪州老窖特曲52度价格 沪州老窖酒价格表图片 42度沪州特酿品藏9多少钱一瓶 沪州御酒52度价格 沪州老窑系列酒报价表 沪州是那个省 金沪州52度多少钱一瓶 四川沪州 泸州旅游景点 四川省泸州市 泸州旅游 泸州网