C++顺序表的分级查找

C++顺序表的分级查找,第1张

C++顺序表的分级查找
// 实验1.2顺序表分级查找.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include 
#include 
using namespace std;
struct Ind
{
    int ori;    //记录分组后每组起始位置的下标
    int key;    //记录每组最大的数据数值
};
class level_s
{
private:
    int N;              //数据个数
    int n_index;        //分组个数
    int* table;         //存储数据
    int* index_table;   //存储每组存放数量
    Ind*in_t;           //Ind类型数组,索引表
public:
    level_s()
    {
        N=0;
        n_index=0;
        table=NULL;
        index_table=NULL;
        in_t = NULL;
    }
    level_s(int Num, int in_Num)
    {
        N = Num;
        n_index = in_Num;
        table =new int[N+10];
        index_table = new int[n_index+10];      
        in_t = new Ind[n_index + 5];     
    }
    ~level_s()
    {
        delete[]table;
        delete[]index_table;
        delete[]in_t;
    }
    void creat(int*T,int*T_index)
    {
        table = T;
        index_table = T_index;

        simple_sort(table, N);
        cout << "从大到小排列:";
        for (int i = 0; i < N; i++)
        {
             cout << table[i] << " ";
        }
        cout << endl;
        
        in_t[0].key = table[0+ index_table[0]-1] ;
        in_t[0].ori = 0;
        for (int i = 1; i < n_index; i++)
        {
            in_t[i].ori = in_t[i - 1].ori + index_table[i - 1];
            in_t[i].key = table[in_t[i].ori+index_table[i]-1];     
        }
        cout << endl;
    }
    
    void simple_sort(int*&T,int n)
    {
        sort(T, T + n);
    }
    int search_region(int n)
    {
        for (int i = 0; i < n_index; i++)
        {
            if (n <= in_t[i].key )
            {
                 return i;
            }     
        }
        cout << "表中无此数据";
        return -1;
    }
    int search_position(int n,int r)
    {
        for (int i = 0; i > N1;
    T1 = new int[N1+10];
    cout << "请输入这些数据:";
    int i = 0;
    for (i = 0; i < N1; i++)
    {
        cin >> T1[i];
    }
    cout << "请输入要分为几组:";
    cin >> N_index1;
    cout << "请输入每组储存多少个数据:";
    index_T1 = new int[N_index1+10];
    for (i = 0; i < N_index1; i++)
    {
        cin >> index_T1[i];
    }
    level_s List1(N1, N_index1);
    List1.creat(T1, index_T1);
    cout << "请输入需要查找的数据:";
    cin >> n;
   R= List1.search_region(n);
   if (R >= 0)
   {
       P = List1.search_position(n, R);
       if (P >= 0)
       {
            cout << "位置为第" << R + 1 << "区域第" << P + 1 << "个";
       }
   } 
   system("pause");
    return 0;
}

1、输入要存储的数据个数

2、输入数据

3、输入要分为几组

4、输入每组存放数据个数

5、输出数据从小到大排序后的结果

6、输入要查找的数据

7、输出其位置

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4750222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存