int SeqSearch1(int r[ ], int n, int k)
//数组r[1] ~ r[n]存放查找集合
{
i=n;
while (i>0 && r[i]!=k)
i–;
return i;
}
int SeqSearch2(int r[ ], int n, int k)
//数组r[1] ~ r[n]存放查找集合
{
r[0]=k; i=n;
while (r[i]!=k)
i --;
return i;
}
int BinSearch1(int r[ ], int n, int k)
//数组r[1] ~ r[n]存放查找集合
{
low=1; high=n;
while (low<=high)
{
mid=(low+high)/2;
if (k<r[mid]) high=mid-1;
else if (k>r[mid]) low=mid+1;
else return mid;
}
return 0;
}
int BinSearch2(int r[ ], int low, int high, int k)
//数组r[1] ~ r[n]存放查找集合
{
if (low>high) return 0;
else {
mid=(low+high)/2;
if (k<r[mid])
return BinSearch2(r, low, mid-1, k);
else if (k>r[mid])
return BinSearch2(r, mid+1, high, k);
else return mid;
}
}
以二叉链表形式存储,类声明如下:
class BiSortTree
{
public:
BiSortTree(int a[ ], int n);
~ BiSortTree( );
void InsertBST(BiNode *root , BiNode *s);
void DeleteBST(BiNode *p, BiNode *f );
BiNode *SearchBST(BiNode *root, int k);
private:
BiNode *root;
};
void BiSortTree::InsertBST(BiNode *root, BiNode *s)
{
if (rootNULL)
root=s;
else if (s->datadata)
InsertBST(root->lchild, s);
else InsertBST(root->rchild, s);
}
BiSortTree::BiSortTree(int r[ ], int n)
{
for (i=0; i<n; i++)
{
s=new BiNode;
s->data=r[i];
s->lchild=s->rchild=NULL;
InsertBST(root, s);
}
}
BiNode *BiSortTree::SearchBST(BiNode *root, int k)
{
if (rootNULL)
return NULL;
else if (root->data==k)
return root;
else if (kdata)
return SearchBST(root->lchild, k);
else return SearchBST(root->rchild, k);
}
第七章
最新推荐文章于 2021-11-11 22:26:33 发布