=n)return -1;else{printf("%d",R[i].key);return i;}}int main(){SeqList R;int ">

查找与及其应用实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{

printf("%d ",R[i].key);

i++; //从表头往后找}

if (i>=n)

return -1;

else

{

printf("%d",R[i].key);

return i;

}

}

int main()

{

SeqList R;

int n=10,i;

KeyType k=5;

int a[]={3,6,2,10,1,8,5,7,4,9};

for (i=0;i

printf("关键字序列:");

for (i=0;i

printf("%d ",R[i].key);

printf("\n");

printf("查找%d所比较的关键字:\n\t",k);

if ((i=SeqSearch(R,n,k))!=-1)

printf("\n元素%d的位置是%d\n",k,i);

else

printf("\n元素%d不在表中\n",k);

printf("\n");

}

代码片段2:

#include

#define MAXL 100//定义表中最多记录个数

typedef int KeyType;

typedef char InfoType[10];

typedef struct

{

KeyType key;//KeyType为关键字的数据类型InfoType data;//其他数据

} NodeType;

typedef NodeType SeqList[MAXL];//顺序表类型

int BinSearch(SeqList R,int n,KeyType k)//二分查找算法{

int low=0,high=n-1,mid,count=0;

while (low<=high)

{

mid=(low+high)/2;

printf("第%d次比较:在[%d,%d]中比较元素R[%d]:%d\n",++count,low,high,mid,R[mid].key);

if (R[mid].key==k)//查找成功返回

return mid;

if (R[mid].key>k)//继续在R[low..mid-1]中查找high=mid-1;

else

low=mid+1;//继续在R[mid+1..high]中查找

}

return -1;

}

int main()

{

SeqList R;

KeyType k=9;

int a[]={1,2,3,4,5,6,7,8,9,10},i,n=10;

for (i=0;i

R[i].key=a[i];

printf("关键字序列:");

for (i=0;i

printf("%d ",R[i].key);

printf("\n");

printf("查找%d的比较过程如下:\n",k);

if ((i=BinSearch(R,n,k))!=-1)

printf("元素%d的位置是%d\n",k,i);

else

printf("元素%d不在表中\n",k);

return 0;

}

代码片段3:

#include

#include

#define MaxSize 100

typedef int KeyType;//定义关键字类型typedef char InfoType;

typedef struct node //记录类型{

KeyType key; //关键字项

InfoType data; //其他数据域

struct node *lchild, *rchild;//左右孩子指针

} BSTNode;

int path[MaxSize];//全局变量,用于存放路径void DispBST(BSTNode *b);//函数说明

int InsertBST(BSTNode *&p, KeyType k);

BSTNode *CreatBST(KeyType A[], int n);

void DispBST(BSTNode *bt);

int JudgeBST(BSTNode *bt);

int SearchBST(BSTNode *bt, KeyType k);

void Delete1(BSTNode *p, BSTNode *&r);

void Delete(BSTNode *&p);

int DeleteBST(BSTNode *&bt, KeyType k);

int InsertBST(BSTNode *&p, KeyType k)//在以*p为根节点的BST中插入一个关键字为k的节点

{

if (p == NULL)//原树为空, 新插入的记录为根节点

{

p = (BSTNode *)malloc(sizeof(BSTNode));

p->key = k; p->lchild = p->rchild = NULL;

return 1;

}

else if (k == p->key)

return 0;

else if (kkey)

return InsertBST(p->lchild, k);//插入到*p的左子树中else

return InsertBST(p->rchild, k); //插入到*p的右子树中}

BSTNode *CreatBST(KeyType A[], int n)

//由数组A中的关键字建立一棵二叉排序树

{

BSTNode *bt = NULL; //初始时bt为空树

int i = 0;

相关文档
最新文档