#include<stdio.h>#include <time.h>#define MAX 10typedef int KeyType;typedef int InfoType;typed

#include<stdio.h>
#include <time.h>
#define MAX 10

typedef int KeyType;
typedef int InfoType;
typedef bool ;
typedef ElenType;

typedef struct//顺序表
{
    int R[MAX];
    KeyType key;
    InfoType data[MAX];//存放元素
    int length;//线性表长度
}RecType;


typedef struct node//二叉树
{
    RecType key;
    InfoType data;
    struct node* lchild, * rchild;
}BSTNode;

void initdata(int a[], int n)
{
    int i; int number = 0;
    /* use the time to seed the random number generator  */
    srand((unsigned)time(NULL));
    for (i = 1; i <= n; i++)
    {
        number = rand() % 10000; //产生10000以内的随机数 
        a[i] = number;
    }
}

/*基础实验项目:
1. 实现线性表的顺序查找算法
2. 实现线性表的二分查找算法
3. 实现树表的二叉排序树查找
拓展实验项目:
实现散列表的散列查找方法。*/

int CreateList(RecType*L, ElenType a[],int n)//创建线性表
{
    int i = 0, k = 0;
    L = (RecType*)malloc(sizeof(RecType));
    while (i > n)
    {
        L->data[i] = a[i];
        k++; i++;
    }
    L->length = k;
}

int SeqSearch(RecType R[], int n, KeyType k)//实现线性表的顺序查找算法
{
    int i = 0; 
    while (i < n && R[i].key != k)
        i++;
    if (i >= n)
        return 0;
    else
        return i + 1;
}

int BinSearch(RecType L, int n, KeyType k)//实现线性表的二分查找算法
{
    RecType *L = (RecType*)malloc(sizeof(RecType));
    int low = 0, high = n - 1, mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (k == L.R[mid].key)
            return mid + 1;
        if (k <=L.R[mid].key)
            high = mid - 1;
        else
            low = mid + 1;
    }
    return 0;
}

/*bool InsertBST(BSTNode* bt, KeyType k)
{
    if(bt==NULL)
        
}*/

BSTNode* CreateBST(KeyType A[], int n)//创建二叉排序树
{
    BSTNode* bt = NULL;
    int i = 0;
    while (i < n)
    {
        InsertBST(bt, A[i]);
        i++;
    }
    return bt;
}

/*BSTNode* SearchBST(BSTNode* bt, KeyType k)//二叉排序树的查找
{
    if (bt == NULL || bt->key == k)
        return bt;
    if (k < bt->key)
        return SearchBST(bt->lchild, k);
    else
        return SearchBST(bt->rchild, k);
}*/

void Show(int result, int key) {
    if (result == 0)
        printf("\n未找到%d\n", key);
    else
        printf("\n找到%d,位置为%d\n", key, result);
    return;
}

BSTNode* BSTSearch(BSTNode* bt, KeyType k)//二叉树查找排序
{
    BSTNode* p = bt;
    while (p != NULL)
    {
        if (p->key == k)
            return p;
        else if (k < p->key)
            p = p->lchild;
        else
            p = p->rchild;
    }
}

void DispBST(BSTNode* bt)
{
    if (bt != NULL)
    {
        printf("%d", bt->key);
        if (bt->lchild != NULL || bt->rchild != NULL)
        {
            printf("(");
            DispBST(bt->lchild);
            if (bt->rchild != NULL)
                printf(",");
            DispBST(bt->rchild);
            printf(")");
        }
    }
}

/*void DispBSt(BSTNode* bt)
{
    if (bt != NULL)
    {
        printf()
    }
}*/

void main()
{
    int a[MAX]; KeyType k; int n=0,m=0; RecType R[MAX];
    RecType* L = (RecType*)malloc(sizeof(RecType));
    printf("**创建顺序表**\n");
    printf("请输入顺序表元素,用空格隔开:\n");
    for(int i=0;i<MAX;i++)
    {
        initdata(a[i], n);
    }
    
    printf("\n-----------顺序查找-----------\n");
    printf("\n【请输入要查找的关键字】\n>>>");
    getchar();
    scanf("%d", &k);
    int result;
    result = SeqSearch(R[],n,k);
    printf("找到了:%d", result);
    Show(result, k);
    printf("\n-------------------------------\n");

    printf("\n-----------折半查找(非递归)-----------\n");
    printf("\n【请输入要查找的关键字】\n>>>");
    getchar();
    scanf("%d", &k);
    result = BinSearch (R[],m, k);
    Show(result, k);
    printf("\n---------------------------------------\n");
    
    printf("\n-----------二叉排序树查找-----------\n");
    printf("\n【请输入要查找的关键字】\n>>>");
    getchar();
    scanf("%d", &k);
    BSTNode* bt;
    result = BSTSearch(bt, k);
    Show(result, k);
    printf("\n---------------------------------------\n");
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惑星撞地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值