【C语言】查找_数据结构_练习
2017-12-12 17:32
453 查看
//编写程序实现下面运算:在二叉排序树中查找关键字为key的记录。
#include <malloc.h>
#include <stdio.h>
typedef int KeyType;
typedef struct {
KeyType key;
}ElemType; //元素类型
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree searchBST(BiTree bt,KeyType key){
/*在二叉排序树 bt 中查找其关键字等于给定值的结点是否存在,并输出相应信息*/
if (bt==NULL) return NULL;//在排序二叉树中进行递归查找
else if (bt->data.key==key) return bt;
else if (key<bt->data.key) return searchBST(bt->lchild,key);
else return searchBST(bt->rchild,key);
}
void insertBST(BiTree *bt,BiTree s){
/*在二叉排序树中插入一个新结点,即依次插入输入的数*/
if (*bt==NULL) *bt=s;
else if (s->data.key<(*bt)->data.key) insertBST(&((*bt)->lchild),s);
else if (s->data.key>(*bt)->data.key) insertBST(&((*bt)->rchild),s);
}
main(){
char ch;
KeyType key;
BiTree bt,s;
int i=0;
/*建立一棵二叉排序树,元素从键盘按先序输入,直到输入关键字等于-1为止*/
printf("\nPlease input data(-1结束):\n");//以-1为结束
scanf("%d",&key);
bt=NULL;
while (key!=-1){
s=(BiTree)malloc(sizeof(BiTNode));
(s->data).key=key;s->lchild=s->rchild=NULL;
insertBST(&bt,s);
scanf("%d",&key);
}//while
/*二叉排序树的查找,可多次查找,并输出查找的结果*/
do {
printf("\nPlease input you want find value:");
scanf("%d",&key);
s=searchBST(bt,key);
if (s!=NULL) printf("\n这个等价元素是 %d.\n",s->data.key);
else printf("\nNOT FIND!\n");
printf("\ncontinue?(y/n):");
scanf("%c",&ch);
ch=getchar();
}
while (ch=='y' || ch=='Y') ;
getchar();
}//main
//将折半查找的算法改写成递归算法。
#include<stdio.h>
#include<malloc.h>
int Search(int Array[],int x,int low,int high){
int mid;
if(low>high)
{
printf("查找失败\n");
return 0;
}
mid=(low+high)/2;
if(Array[mid]==x)
printf("查找成功,为第%d个元素\n",mid);
else if(Array[mid]>x)
Search(Array,x,low,mid-1);
else
Search(Array,x,mid+1,high);
}
int main(){
int length,i,x;
int low,high;
printf("请输入顺序长度length:\n");
scanf("%d",&length);
int Array[length];
printf("按递增有序输入顺序元素:\n");
for(i=1;i<=length;i++)
scanf("%d",&Array[i]);
printf("顺序表为:\n");
for(i=1;i<=length;i++)
printf("%d",Array[i]);
printf("\n");
low=1;
high=length;
printf("请输入需要查找的元素:");
scanf("%d",&x);
Search(Array,x,low,high);
return 0;
}
#include <malloc.h>
#include <stdio.h>
typedef int KeyType;
typedef struct {
KeyType key;
}ElemType; //元素类型
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree searchBST(BiTree bt,KeyType key){
/*在二叉排序树 bt 中查找其关键字等于给定值的结点是否存在,并输出相应信息*/
if (bt==NULL) return NULL;//在排序二叉树中进行递归查找
else if (bt->data.key==key) return bt;
else if (key<bt->data.key) return searchBST(bt->lchild,key);
else return searchBST(bt->rchild,key);
}
void insertBST(BiTree *bt,BiTree s){
/*在二叉排序树中插入一个新结点,即依次插入输入的数*/
if (*bt==NULL) *bt=s;
else if (s->data.key<(*bt)->data.key) insertBST(&((*bt)->lchild),s);
else if (s->data.key>(*bt)->data.key) insertBST(&((*bt)->rchild),s);
}
main(){
char ch;
KeyType key;
BiTree bt,s;
int i=0;
/*建立一棵二叉排序树,元素从键盘按先序输入,直到输入关键字等于-1为止*/
printf("\nPlease input data(-1结束):\n");//以-1为结束
scanf("%d",&key);
bt=NULL;
while (key!=-1){
s=(BiTree)malloc(sizeof(BiTNode));
(s->data).key=key;s->lchild=s->rchild=NULL;
insertBST(&bt,s);
scanf("%d",&key);
}//while
/*二叉排序树的查找,可多次查找,并输出查找的结果*/
do {
printf("\nPlease input you want find value:");
scanf("%d",&key);
s=searchBST(bt,key);
if (s!=NULL) printf("\n这个等价元素是 %d.\n",s->data.key);
else printf("\nNOT FIND!\n");
printf("\ncontinue?(y/n):");
scanf("%c",&ch);
ch=getchar();
}
while (ch=='y' || ch=='Y') ;
getchar();
}//main
//将折半查找的算法改写成递归算法。
#include<stdio.h>
#include<malloc.h>
int Search(int Array[],int x,int low,int high){
int mid;
if(low>high)
{
printf("查找失败\n");
return 0;
}
mid=(low+high)/2;
if(Array[mid]==x)
printf("查找成功,为第%d个元素\n",mid);
else if(Array[mid]>x)
Search(Array,x,low,mid-1);
else
Search(Array,x,mid+1,high);
}
int main(){
int length,i,x;
int low,high;
printf("请输入顺序长度length:\n");
scanf("%d",&length);
int Array[length];
printf("按递增有序输入顺序元素:\n");
for(i=1;i<=length;i++)
scanf("%d",&Array[i]);
printf("顺序表为:\n");
for(i=1;i<=length;i++)
printf("%d",Array[i]);
printf("\n");
low=1;
high=length;
printf("请输入需要查找的元素:");
scanf("%d",&x);
Search(Array,x,low,high);
return 0;
}
相关文章推荐
- 用c语言实现二分法查找表格【数据结构】
- C语言编程练习——查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数:
- C语言数据结构练习——停车场管理系统(使用栈和队列)(草稿的草稿)
- 数据结构 c语言 hash查找 链地址法实现
- 数据结构_8:查找:Hash:C语言
- c语言数据结构之二叉(查找)树
- 平衡二叉树的 插入 删除 查找 等功能c语言实现 数据结构
- c语言练习 10-1. 在字符串中查找指定字符(15)
- 数据结构_练习 第7章 查找
- C语言数据结构中二分查找递归非递归实现并分析
- c语言练习(3)--查找字符出现次数和替换字符串
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- 《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)
- C语言数据结构之 折半查找实例详解
- 平衡二叉树的C语言实现(创建、插入、查找、删除、旋转)【数据结构】
- 数据结构_2:链表:C语言练习
- 数据结构 练习 20-查找 算法
- 数据结构练习(04)查找最小的k个元素
- c语言数据结构分析7之 二分查找
- 【C语言】树_数据结构_练习