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提交记录截图

  • 相关阅读:
    jquery toggle(listenerOdd, listenerEven)
    struts quick start
    hdu 1518 Square (dfs)
    hdu 2544 最短路 (最短路径)
    hdu 1754 I Hate It (线段树)
    hdu 1856 More is better (并查集)
    hdu 1358 Period (KMP)
    hdu 2616 Kill the monster (DFS)
    hdu 2579 Dating with girls(2) (bfs)
    zoj 2110 Tempter of the Bone (dfs)
  • 原文地址:https://www.cnblogs.com/chenwenjie/p/9092691.html
Copyright © 2011-2022 走看看