• 查找算法的实现与分析(数据结构实验)


    实验项目七 查找算法的实现与分析

    课程名称:数据结构

    实验项目名称:查找算法的实现与分析

    实验目的:

    1.掌握二叉排序树的创建及查找算法(递归和非递归均可)。

    实验要求:

    1、    创建一棵二叉排序树,并实现对该二叉排序树的查找算法。

    实验过程:

    1、    输入一数据序列,根据输入的数据序列创建一棵二叉排序树(二叉链表);

    2、    在已创建的二叉排序树中查找“37”和“66”两个结点,并给出相应的查询结果。

    实验报告中给出创建二叉排序树和二叉排序树的查找算法代码。

    实验结果:

    1、输入数据序列:45,24,53,12,37,93。

    2、输出二叉排序树的中序遍历序列:12,24,37,45,53,93;

    3、输入要查找的数据:37, 输出查找的结果:该结点已找到。

    输入要查找的数据:93, 输出查找的结果:该结点未找到。

    实验分析:

    1.对二叉排序树的查找进行性能分析,计算其ASL;

    2.列举调试运行过程中出现的错误并分析原因。

    要求:

    (1) 程序要添加适当的注释,程序的书写要采用缩进格式。

    (2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

    (3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

    (4) 上传源程序到课堂派。顺序表的源程序保存为BST.cpp。

    程序代码:

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    //#define Yes 1
    //#define No 0
    
    typedef struct
    {//二叉排序树的二叉链表存储表示 
        int key;   //关键字项 
        int otherinfo;      //其他数据项 
    //    int Yes=1,No=0; 
    }ElemType;         //每个节点的数据域的类型 
    
    typedef struct BSTNode
    {    
        ElemType data;         //每个节点的数据域包括关键字项和其他数据项 
        struct BSTNode *lchild,*rchild;
    }BSTNode,*BSTree;
     
    typedef struct
     {
         ElemType *R;     //存储空间基地址 
         int length;   //当前长度 
    }SSTable;
      
    int Search_Seq(SSTable ST,int key) 
    {//7.1 顺序查找 
        int i;
        ST.R[0].key==key;
        for(i=ST.length;ST.R[i].key!=key;--i) 
           return i; //从后往前找
    }
      
    int SearchBST(BSTree T,int key) 
    {//在根指针T所指二叉排序树中递归的查找某关键字等于key的数据元素 
        //若查找成功,则返回指向该数据元素的指针,否则返回空指针
    //    if((!T)||key==T->data.key) 
    //        return T;       //查找结束 
    //    else if(key<T->data.key)         
    //        return SearchBST(T->lchild,key);        //在左子树中继续查找  
    //    else 
    //        return SearchBST(T->rchild,key);       //在右子树中继续查找 
        if(!T)
        {
            return 0;
            cout<<"树为空
    ";        
        }
        else
        {
            if(key==T->data.key)
                return 1;
            else if(key<T->data.key)         
                return SearchBST(T->lchild,key);        //在左子树中继续查找  
            else 
                return SearchBST(T->rchild,key);       //在右子树中继续查找  
        }
        
        
    }
    
    void InsertBST(BSTree &T,ElemType e)
    {
        BSTNode *S;
        if(!T)
        {
            S=new BSTNode;
            S->data=e;
            S->lchild=S->rchild=NULL;
            T=S;
        }
        else if(e.key<T->data.key)
            InsertBST(T->lchild,e);
        else if(e.key>T->data.key)
            InsertBST(T->rchild,e);
    }
    
    BSTNode CreatBST(BSTree &T)
    {
        ElemType e;
        T=NULL;
        cout<<"输入数据序列(末尾输入0,代表结束):
    "; 
        cin>>e.key;
        while(e.key!=0)
        {
            InsertBST(T,e);
            cin>>e.key;
        }
    
    }
    
    
    void InOrderTraverse1(BSTNode *T) 
    {//中序遍历二叉树T的递归算法 
    //    cout<<"二叉树中序递归遍历
    ";
        if(T)                                 //若二叉树非空 
        {
            InOrderTraverse1(T->lchild);        //遍历左孩子 
            printf("%d,",T->data);                     //访问根节点 
            InOrderTraverse1(T->rchild);          //遍历右孩子 
        }
    
    }
      
    main() 
    {
        BSTNode *T;
    //    cout<<"创建二叉排序:
    "; 
        CreatBST(T);
        cout<<"
    输出二叉树的中序遍历序列:
    ";    
        InOrderTraverse1(T);    
        int i,result;
        string choose;
        while(1)
        {
            cout<<"
    
    是否进行查找(yes为继续查找,no结束):";
            cin>>choose;
            if(choose=="yes") 
            {
                cout<<"
    输入要查找的数据:";
                cin>>i;
                
                result=SearchBST(T,i);
                cout<<"
    输出查找的结果:" ;
                if(result==0)
                    cout<<"该节点未找到。
    ";
                else if(result==1)
                    cout<<"该节点已找到。
    ";
            }
            else
            {
                cout<<"
    程序结束,按任意键将推出对话框";
                break; 
            } 
                
        }
        
    }
      
      
      
      
      
      
      
      
  • 相关阅读:
    Microsoft .NET Framework 远程执行代码漏洞
    GE PACSystems RX3i 输入验证漏洞
    Windows10 1809版本Windows自动更新服务无法禁用问题解决方案
    企业网络防范Serv-U的漏洞
    jsp安全问题及其解决建议
    Windows XP系统搜索故障及处理办法点点通
    开启路由器的TCP拦截
    从MyIE2平滑升级到Maxthon的完美方案
    全面解析UNIX缓冲区溢出 深度防御体系
    从异常系统进程检查企业网络安全 (二)
  • 原文地址:https://www.cnblogs.com/xisheng/p/8206898.html
Copyright © 2020-2023  润新知