数据结构:快状链表(数组链表联合)
2015-08-17 00:56
387 查看
#include <iostream> #define _MAX_ 10 using namespace std; //块状链表。 struct MyNode { //按理说每块数据的数组长度应该是根号N到2倍的根号N之间,暂时 //我为了测试就使用100个左右的数据。 int *data; int size;//大小。 int currentIndex;//当前下标。 MyNode *prev; MyNode *next; MyNode() :prev(NULL), next(NULL) { data = new int[_MAX_]; size = _MAX_; currentIndex = 0; } }; class MyBlock { public: MyBlock() { first = last = new MyNode();//不循环了吧。 } void Insert(int a[],int n ) { MyNode *p = first; for (int i = 0; i < n; i++) { if (p == first)//一快还没有创建。 { MyNode *s = new MyNode(); s->data[s->currentIndex] = a[i];//刚在第一快第一个位置。 s->currentIndex++; s->prev = p; p->next = s; p = s;//p后移动。 } else { p = first->next;//从开头开始找,我才可以保证我的每一块都有序,快与快之间也有序。 while (p->next != NULL) { if (p->next->data[0] > a[i]) break; p = p->next;//找到a[i]的位置。 } //先插入,如果满了就拆分,满了是_MAX_(10)个元素,按一般拆分,就是5个数据。 int j; for (j = p->currentIndex; j > 0; j--) { if (p->data[j - 1] < a[i]) break; p->data[j] = p->data[j - 1];//插入排序。 } p->data[j] = a[i]; p->currentIndex++; //判断是否满了,满了就取半拆分。 if (p->currentIndex == p->size) { MyNode *s = new MyNode(); for (j = 5; j < p->size; j++) { s->data[s->currentIndex++] = p->data[j]; } p->currentIndex -= 5; if (p->next != NULL) { p->next->prev = s; s->next = p->next; s->prev = p; p->next = s; } else { s->prev = p; p->next = s; p = s; } } } } } void Printf() { MyNode *p = first->next; int count = 1; while (p != NULL) { cout << "第" <<count++<< "快" << " : "; for (int i = 0; i < p->currentIndex; i++) { cout << p->data[i] << " "; } cout << endl; p = p->next; } } private: MyNode *first; MyNode *last; //好吧,是双向循环链表。 }; int main() { int a[100]; for (int i = 0; i < 100; i++) { a[i] = rand() % 100; } MyBlock mb; mb.Insert(a,sizeof(a)/sizeof(int)); mb.Printf(); }
相关文章推荐
- 数据结构 字符串二分查找正确实现
- 数据结构-二叉搜索树(Binary Search Tree)的C++实现模板
- 数据结构之二叉树的遍历
- 数据结构 堆排序的实现
- 数据结构 二叉树遍历之前序、中序、后序以及层次遍历实现
- 数据结构 基数排序的实现
- 数据结构-树的存储结构
- 自己动手实现数据结构——排序算法2 (希尔、快速、堆)(C++实现)
- 数据结构-树
- 数据结构-队列2
- 数据结构-队列1
- 【四】nginx的数据结构(2)——自己动手重写红黑树
- 数据结构和算法系列15 线索二叉树
- 数据结构:二叉树(前,中,后,层次)非递归遍历。
- 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装
- 《数据结构与算法分析——c语言描述》读后笔记 6
- 数据结构学习系列之线性表(四)
- 树结构的自定义及基本算法(Java数据结构学习笔记)
- 【数据结构】线性表顺序结构的操作---C/C++语言
- 【数据结构】双向循环线性表的基本操作--C++/C实现