📄 mycontrol.cpp
字号:
// MyControl.cpp : 实现文件
//
#include "stdafx.h"
#include "MyControl.h"
#include "MyBPlusTree.h"
#include "MainFrm.h"
// MyControl
long MyControl::m_lMine[15] = {5,60,53,45,12,3,54,55,1,2,7,6,4,8,10};
MyControl::MyControl()
{
m_pParentWnd = NULL;
m_drawKey0 = -1;
m_drawLevel = 1;
m_iType = 0;
m_iInput = 0;
m_iRandom = 0;
m_insertPoint = NULL;
m_bSleep = false;
m_iNumber = -1;
m_tree.SetParent((void*)this);
}
MyControl::~MyControl()
{
}
// MyControl 成员函数
bool MyControl::Create(int n/*=MINIMUS_NUMBER_OF_NODE*/)
{
return m_tree.Create(n);
}
int MyControl::GetN()
{
return m_tree.N;
}
int MyControl::ModifyTree(int n)
{
if(n == GetN())
return -1;
BOOL B = ((CMainFrame*)m_pParentWnd)->m_BView;
((CMainFrame*)m_pParentWnd)->m_BView = FALSE;
int i = 0; // number
int j; // for
long* k = new long[m_tree.m_keys];
long** p = new long*[m_tree.m_keys];
MyNode* pnode = m_tree.m_root;
while(pnode->m_level > 1)
pnode = (MyNode*)pnode->p[0];
do
{
for(j=0;j<pnode->m_n;j++)
{
k[i] = pnode->k[j];
p[i] = (long*)pnode->p[j];
i++;
}
pnode = (MyNode*)(((MyLeaf*)pnode)->m_next);
}while(pnode);
m_tree.DeleteTree();
m_tree.Create(n);
for(j=0;j<i;j++)
m_tree.Insert(k[j],p[j]);
delete [] k;
delete [] p;
m_drawKey0 = -1;
m_iType = 0;
DisplayTree();
((CMainFrame*)m_pParentWnd)->m_BView = B;
return 0;
}
void MyControl::DeleteTree(void)
{
BOOL B = ((CMainFrame*)m_pParentWnd)->m_BView;
((CMainFrame*)m_pParentWnd)->m_BView = FALSE;
m_tree.DeleteTree();
m_iInput = 0;
m_iRandom = 0;
m_drawKey0 = -1;
m_drawLevel = 1;
m_iType = 0;
DisplayTree();
((CMainFrame*)m_pParentWnd)->m_BView = B;
}
int MyControl::Search(long key)
{
long* pkey = m_tree.Search(key);
if(!pkey) return -1;
Display(m_tree.m_current->k[0],m_tree.m_current->m_level,1);
return 0;
}
int MyControl::Insert(long key)
{
if(m_iInput >= MAXINPUT)
return -3;
m_lInput[m_iInput] = key;
int i = m_tree.Insert(m_lInput[m_iInput],&m_lInput[m_iInput]);
m_iInput++;
// m_tree.Search(key);
// int j = m_tree.m_current->Search(key);
// if(j == m_tree.m_current->m_n)
// j = ((MyLeaf*)m_tree.m_current)->m_next->Search(key);
int j = m_tree.SearchKey(m_tree.m_root,key,1);
Display(m_tree.m_current->k[0],m_tree.m_current->m_level,15,NULL,j);
return i;
}
int MyControl::Delete(long key)
{
int i = m_tree.Delete(key);
m_drawKey0 = m_tree.m_current->k[0];
m_iType = 0;
DisplayTree();
return i;
}
void MyControl::InsertStore()
{
BOOL B = ((CMainFrame*)m_pParentWnd)->m_BView;
((CMainFrame*)m_pParentWnd)->m_BView = FALSE;
for(int i=0;i<15;i++)
m_tree.Insert(m_lMine[i],&m_lMine[i]);
m_iType = 0;
DisplayTree();
((CMainFrame*)m_pParentWnd)->m_BView = B;
}
int MyControl::PreInsertRandom(int n)
{
if(m_iRandom >= MAXRANDOM)
return -MAXRANDOM;
return (n > (MAXRANDOM-m_iRandom)) ? (MAXRANDOM-m_iRandom) : n;
}
void MyControl::InsertRandom(int n)
{
srand((unsigned)time(NULL));
BOOL B = ((CMainFrame*)m_pParentWnd)->m_BView;
((CMainFrame*)m_pParentWnd)->m_BView = FALSE;
for(int i=0;i<n;i++)
{
m_lRandom[m_iRandom] = rand()%100;
m_tree.Insert(m_lRandom[m_iRandom],&m_lRandom[m_iRandom]);
m_iRandom++;
}
m_drawKey0 = -1;
m_iType = 0;
DisplayTree();
((CMainFrame*)m_pParentWnd)->m_BView = B;
}
int MyControl::DeleteRandom()
{
if(m_tree.m_keys == 0) return -2;
int i,j,n,r;
long k = 1;
i=j=n=r=0;
srand((unsigned)time(NULL));
i = rand()%m_tree.m_keys;
MyNode* pnode;
pnode = m_tree.m_root;
while(pnode->m_level > 1)
pnode = (MyNode*)pnode->p[0];
while(pnode)
{
for(n=0;n<pnode->m_n;n++)
{
k = pnode->k[n];
j++;
if(j >= i) break;
}
if(j >= i) break;
pnode = (MyNode*)(((MyLeaf*)pnode)->m_next);
}
r = m_tree.Delete(k);
m_drawKey0 = m_tree.m_current->k[0];
m_iType = 0;
DisplayTree();
return r;
}
void MyControl::SetParentWnd(CWnd* pParentWnd)
{
m_pParentWnd = pParentWnd;
}
void MyControl::Display(long key0,int level,int type,void* insertPoint/*=NULL*/,int iNumber/*=-1*/)
{
MyNode* tnode = m_tree.m_current;
m_drawKey0 = key0;
m_drawLevel = level;
m_iType = type;
m_insertPoint = insertPoint;
m_iNumber = iNumber;
DisplayTree();
m_tree.m_current = tnode;
}
void MyControl::DisplayTree(void)
{
((CMainFrame*)m_pParentWnd)->DisplayTree();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -