码迷,mamicode.com
首页 > 其他好文 > 详细

顺序查找,折半查找,二叉排序树的建立,哈希表的建立

时间:2014-07-02 20:24:09      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:style   blog   os   for   io   new   

以下四个验证性实验都做。

1)顺序查找验证

2)折半查找验证

3)二叉排序树的建立

4)哈希表的建立

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<string.h>
#include<algorithm>
using namespace std;
class dijiuzhang
{
public:
    int a[10];
    struct Node
    {
        int data;
        Node * rchild;
        Node * lchild;
        Node(int a):data(a),rchild(NULL),lchild(NULL) {}
        Node():rchild(NULL),lchild(NULL) {}
    };
    Node * head;
    Node * cur;
    dijiuzhang()
    {
        Node * head = new Node();
        for(int i = 0 ; i < 10 ; i ++)
        {
            int tem;
            while(1)
            {
                int flag = 0;
                tem = rand()%10;
                for(int j = 0 ; j < i ; j++)
                {
                    if(tem == a[j])
                    {
                        flag = 1;
                        break;
                    }
                }
                if(flag==0)
                {
                    a[i] = tem;
                    break;
                }

            }
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    void shunxu(int b)//顺序查找
    {
        cout<<"顺序查找"<<endl;
        for(int i = 0 ; i < 10 ; i++)
        {
            if(a[i] == b)
            {
                cout<<"Find!"<<endl;
                cout<<"i="<<i<<endl;
                return;
            }
        }
        cout<<"not find"<<endl;
    }
    void zheban(int b)//折半查找
    {
        cout<<"折半查找:"<<endl;
        int low,high,mid;
        low = 0;
        high = 9;
        sort(a,a+10);
        while(low <= high)
        {
            mid = (low + high) / 2;
            if(a[mid] == b)
            {
                cout<<"Find!"<<endl;
                cout<<"i="<<mid<<endl;
                return;
            }
            else if(a[mid] > b)
            {
                high = mid - 1;
            }
            else
            {
                low = mid + 1;
            }
        }
        cout<<"not find"<<endl;
        return;
    }
    void erchapaixushu()//二叉排序树
    {
        cout<<"二叉排序树dfs"<<endl;
        for(int i = 0 ; i < 10 ; i++)
        {
            Node * tem = new Node(a[i]);
            if(i==0)
            {
                head = tem;
                cur = tem;
                continue;
            }
            while(1)
            {
                if(cur -> data <= tem -> data && cur -> rchild == NULL)
                {
                    cur -> rchild = tem;
                    cur = head;
                    break;
                }
                else if(cur -> data <= tem -> data)
                {
                    cur = cur -> rchild;
                }
                if(cur -> data > tem -> data && cur -> lchild == NULL)
                {
                    cur -> lchild = tem;
                    cur = head;
                    break;
                }
                else if(cur -> data > tem -> data)
                {
                    cur = cur -> lchild;
                }
            }
        }
    }
    void dfs(Node * tem)
    {
        if(tem)
        {
            dfs(tem -> lchild);
            cout<<tem -> data<<" ";
            dfs(tem -> rchild);
        }
    }
    void haxi()//哈希表
    {
        int tem[10];
        int chongtu[10] = {1,-1,2,-2,3,-3,4,-4,5,-5};
        memset(tem , 0 , sizeof(int)*10);
        for(int j = 0 ; j < 10 ; j ++)
        {
            int temi = 0;
            int temchongtu = 0;
            while(1)
            {
                if(tem[a[j]%11+temchongtu]==0)
                {
                    tem[a[j]%11+temchongtu] = a[j];
                    break;
                }
                else
                {
                    temchongtu = chongtu[temi++];
                }
            }
        }
        cout<<endl;
        cout<<"建立的哈希表:"<<endl;
        for(int i = 0 ; i < 10 ; i++)
        {
            cout<<tem[i]<<" ";
        }
    }

};
int main()
{
        dijiuzhang duskcl;
        int a = 3;
        duskcl.zheban(a);
        duskcl.shunxu(a);
        duskcl.erchapaixushu();
        duskcl.dfs(duskcl.head);
        duskcl.haxi();
}

 

  

 

顺序查找,折半查找,二叉排序树的建立,哈希表的建立,布布扣,bubuko.com

顺序查找,折半查找,二叉排序树的建立,哈希表的建立

标签:style   blog   os   for   io   new   

原文地址:http://www.cnblogs.com/Duskcl/p/3819292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!