您的位置:首页 > 理论基础 > 数据结构算法

【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;

 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息