#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);
#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; 加了哨兵之后就。。。。。