查找与及其应用实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 (k 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;