zoukankan      html  css  js  c++  java
  • 查找

    一.学习总结:

    1.查找结构思维导图

    2.查找学习体会

     查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值得数据元素(或记录)。查找表是同一类型的数据元素(或记录)构成的集合。查找表按照操作方式分为两大类:

     静态查找表:只作查找操作的查找表。

           顺序表查找、有序表查找、线性索引查找

     动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个元素。

           二叉排序树、平衡二叉树(AVL树)、多路查找树(B树)

    概念理解起来不难   更重要的是操作  要多加打代码  熟悉算法

    二:PTA实验作业

    题目一:是否是二叉搜索树

    1.设计思路:

    定义一个变量i  和数组变量a[]

    int InorderTraversal(BinTree T){
          如果树的根节点不为空

         进行中序遍历 满足二叉搜索树的特点返回1,否则返回0
    }
    bool IsBST ( BinTree T ){

          定义一个变量b存储递归函数返回的值

          如果根节点为空则是二叉搜索树

          否则调用上面的递归函数,如果b=1,则为真,b=0,则为假
     
    }

    2.代码截图

    3.PTA提交列表说明

    开始编译错误是由于在代码的某一行分号打错,部分正确是因为没有考虑到根节点为空的情况

    题目二:二叉搜索树中的最近公共祖先

    1.设计思路:

     int find(Tree T,int u)  
    {  
      如果T无孩子   返回0
      如果根节点的值等于u   返回1
      如果根节点的值小于u   返回u到右子树中找
      如果根节点的值大于u   返回u到左子树中找 
    }  
      
    int LCA( Tree T,  int u, int v )  
    {  
        如果无T  则返回错误  
        如果没有在树中找到u或v   则返回错误
        如果u或v等于T    返回T的值
        如果u大于T且v小于T或者u小于T且v大于T      返回T的值
       如果u大于T   则在T的右孩子中找
        否则在T的左孩子中找
    }   
    2.代码截图

    3.PTA提交列表

    这个题其实我是不会做的,挣扎不出来,就去问了度娘,然后找到了很好的解决方法 ,此方法比较思路清晰简单易懂,就自己打了一遍,竟然过了,哈哈哈哈,开心

    题目三:QQ帐户的申请与登陆

    1.设计思路:

    while(T--)
    {
      定义命令符,QQ号,密码 
      如果是新用户
    if(M.find(id)!=M.end())    已经存在该用户
    else   存入新信息

    如果是老用户

    if(tmp==pass)     不存在该用户
    else   错误
    }

    2.代码截图

    3.PTA提交列表

    经过大佬和度娘的指导,我深刻了解了map模拟算法,一直编译错误是因为选错编译器,改成C++就好了

    三.PTA排名

    四。阅读代码

     namespace HashSearch.CSharp
    {
        class Program
        {
            //初始化哈希表
            static int hashLength = 7;
            static int[] hashTable= new int[hashLength];

            //原始数据
            static List<int> list = new List<int>() { 13,29,27,28,26,30,38 };

            static void Main(string[] args)
            {
                Console.WriteLine("********************哈希查找(C#版)********************\n");
                
                //创建哈希表
                for (int i = 0; i < list.Count; i++)
                {
                    Insert(hashTable,list[i]);
                }
                Console.WriteLine("展示哈希表中的数据:{0}",String.Join(",",hashTable));

                while (true)
                {
                    //哈希表查找
                    Console.Write("请输入要查找的数据:");
                    int data = int.Parse(Console.ReadLine());
                    var result = Search(hashTable, data);
                    if (result == -1) Console.WriteLine("对不起,没有找到!");
                    else Console.WriteLine("数据的位置是:{0}", result);
                }
            }

            /// <summary>
            /// 哈希表插入
            /// </summary>
            /// <param name="hashTable">哈希表</param>
            /// <param name="data">待插入值</param>
            public static void Insert(int[] hashTable, int data)
            { 
                //哈希函数,除留余数法
                int hashAddress = Hash(hashTable,data);

                //如果不为0,则说明发生冲突
                while (hashTable[hashAddress] != 0)
                {
                    //利用开放定址的线性探测法解决冲突
                    hashAddress = (++hashAddress) % hashTable.Length;
                }

                //将待插入值存入字典中
                hashTable[hashAddress] = data;
            }

            /// <summary>
            /// 哈希表查找
            /// </summary>
            /// <param name="hashTable">哈希表</param>
            /// <param name="data">待查找的值</param>
            /// <returns></returns>
            public static int Search(int[] hashTable, int data)
            {
                //哈希函数,除留余数法
                int hashAddress = Hash(hashTable,data);

                //冲突发生
                while (hashTable[hashAddress] != data)
                {
                    //利用开放定址的线性探测法解决冲突
                    hashAddress = (++hashAddress) % hashTable.Length;

                    //查找到了开放单元或者循环回到原点,表示查找失败
                    if (hashTable[hashAddress] == 0 || hashAddress==Hash(hashTable,data)) return -1;
                }
                //查找成功,返回值的下标
                return hashAddress;
            }

            /// <summary>
            /// 哈希函数(除留余数法)
            /// </summary>
            /// <param name="hashTable">待操作哈希表</param>
            /// <param name="data"></param>
            /// <returns>返回数据的位置</returns>
            public static int Hash(int[] hashTable, int data)
            {
                return data % hashTable.Length;
            }
        }
    }

     

  • 相关阅读:
    Linux iptables 配置规则
    Java之品优购课程讲义_day06(7)
    TCP的三次握手与四次挥手
    区块链挖矿演变史,一键挖矿逐渐成主流
    Java KeyStore 用命令生成keystore文件
    SpringBoot | 第六章:常用注解介绍及简单使用
    PHP开发模式之-单例模式
    Ansible笔记
    CentOS7中搭建cobbler自动装机服务
    号称“新至强,可拓展,赢当下”的Xeon可拓展处理器有多逆天?
  • 原文地址:https://www.cnblogs.com/lhx0814/p/9097767.html
Copyright © 2011-2022 走看看