zoukankan      html  css  js  c++  java
  • 博客作业05--查找

    1.学习总结(2分)

    1.1查找的思维导图

    1.2 查找学习体会

    本章学习了部分查找方法,各种查找方法间的时间复杂度,ASL都不同,可以根据需求来选择查找方法,
    其中较难的我认为是B B+树,还不太熟练,
    同时,还学会了哈希函数以及map,其中map可以简便的解决很多问题。

    2.PTA实验作业(4分)

    2.1 题目1:6-2 是否二叉搜索树

    2.2 设计思路(伪代码或流程图)

    定义函数FindMin查找树中的最小值
    定义函数FindMax查找树中的最大值
    定义函数IsBST判断是否为二叉搜索树
    bool IsBST ( BinTree T )
    	若该节点为空
    		则返回true
    	否则
    		利用递归访问左右结点并且判断该节点的左右结点是否都返回true
    			若否
    				则返回false
    			若是
    				判断该节点的值是否大于左边的最大值且小于右边的最小值
    					若是
    						则返回true
    					否则
    						返回false 	
    

    2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

    2.4 PTA提交列表说明。


    误将‘大于左边的最大值且小于右边的最小值‘判断成’大于左节点的值小于右节点的值‘导致答案错误,设置了查找最大最小的函数后解决该问题。

    2.5 题目2: 6-3 二叉搜索树中的最近公共祖先

    2.6 设计思路(伪代码或流程图)

    定义函数judge判断该数字是否在该树中
    定义函数LCA寻找二叉搜索树中的最近公共祖先 
    int LCA( Tree T, int u, int v )
    	若其中一个数字不在树中,返回ERROR
    	若该节点的值等于或在两个数之间,返回该节点
    	若该节点的值小于两个数,则递归访问该节点的右孩子
    	若该节点的值大于两个数,则递归访问该节点的左孩子
    
    

    2.7 代码截图

    2.8 PTA提交列表说明。


    少判断了两结点之一是答案的情况,用if添加条件解决问题

    2.9 题目3:7-2 航空公司VIP客户查询

    2.10

    定义id代表身份证号码,k为最低里程,K为实际里程,n为用户数量 
    应用map函数将id 与 K 关联 
    map<string,int>a;
    for i = 0 to n 
    	输入id和里程
    	若实际里程小于k
    		则将实际里程按最低里程计算
    	累计各个用户的里程 
    end for
    for i = 0 to n 
    	若 a[id] = 0代表该用户没有登记,输出提示
    	否则输出a[id]即该用户的里程 
    end for 
    

    2.11 代码截图

    2.12 PTA提交列表说明


    部分正确是因为1 2测试点运行超时,将原本的c++语言改为c语言得以解决

    3.截图本周题目集的PTA最后排名(3分)

    3.1 PTA排名

    3.2 我的总分:145

    4. 阅读代码(必做,1分)

    /*采用数组实现哈希表*/ 
    
    #include<stdio.h>
    #define DataType int
    #define Len 10
    
    typedef struct HashNode    
    {
        DataType data;    //存储值 
        int isNull;       //标志该位置是否已被填充 
    }HashTable;
    
    HashTable hashTable[Len];
    
    void initHashTable()     //对hash表进行初始化 
    {
        int i;
        for(i = 0; i<Len; i++)
        {
            hashTable[i].isNull = 1;    //初始状态为空 
        }
    }
    
    int getHashAddress(DataType key)    //Hash函数 
    {
        return key * 3 % 7;      
    }
    
    int insert(DataType key)    
    {
        int address = getHashAddress(key);       
        if(hashTable[address].isNull == 1)  //没有发生冲突 
        {
            hashTable[address].data = key;
            hashTable[address].isNull = 0;
        }
        else    //当发生冲突的时候 
        {
            while(hashTable[address].isNull == 0 && address<Len)
            {
                address++;          //采用线性探测法,步长为1 
            }
            if(address == Len)      //Hash表发生溢出 
                return -1;
            hashTable[address].data = key;
            hashTable[address].isNull = 0;
        }
    
        return 0;
    }
    
    int find(DataType key)       
    {
        int address = getHashAddress(key);
        while( !(hashTable[address].isNull == 0 && hashTable[address].data == key && address<Len))
        {
            address++;
        } 
    
        if( address == Len)
        {
            address = -1;
        }
    
        return address;
    }
    
    
    int main(int argc, char *argv[])
    {
        int key[]={7,8,30,11,18,9,14};
        int i;
        initHashTable();
    
        for(i = 0; i<7; i++)
        {
            insert(key[i]);
        }
    
        for(i = 0; i<7; i++)
        {
            int address;
            address = find(key[i]);
            printf("key:%d	 address:%d
    ", key[i],address);
        }
    
        return 0;
    }
    
    

    该代码为哈希表的实现代码,运用了线性探测法来解决冲突,哈希表长度为len在头部有进行定义,代码工整且都有注释。

    5. 代码Git提交记录截图

  • 相关阅读:
    北邮ivi测试频道 26个高清频道 IPv4 有PC端和移动端地址
    Nginx+ffmpeg+ckplayer海康监控摄像头在web页面播放RTSP转RTMP
    Vlc播放RTSP
    [RTSP]WPF用VLC显示RTSP视频
    WPF 使用 VLC 3.0.10 的基本操作
    【矩阵专题】——矩阵快速幂
    1120:同行列对角线的格
    1120:同行列对角线的格
    1120:同行列对角线的格
    1119:矩阵交换行
  • 原文地址:https://www.cnblogs.com/chenwenjie/p/9092691.html
Copyright © 2011-2022 走看看