// 实验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、输出其位置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)