⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skyrainreg.cpp

📁 《数据结构》中二叉树的常用算法的练习。包括排序、兄弟-孩子链表的建立
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
//※                                                                        ※
//※  	文件名:SkyRainReg.cpp       	                                    ※
//※                                                                        ※
//※    天雨注册表数据结构实现程序代码                                      ※
//※                                                                        ※
//※    版权所有:赵天雨 zxphxh@163.com  2003 - 2006                        ※
//※                                                                        ※
//※    Version :2.0.060215                                                ※
//※                                                                        ※
//※    最后修改日期:2005.11.25 -- 2006.02.15                              ※
//※                                                                        ※
//※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

//---------------------------------------------------------------------------
#pragma once

#include "stdafx.h"
#include "SkyRainReg.h"

//---------------------------------------------------------------------------
#pragma comment(lib, "shlwapi.lib")
//---------------------------------------------------------------------------

void ShowMsg(PSTRTYPE Msg)
{
    MessageBoxA(NULL, Msg, "调试提示", 0);
}
//---------------------------------------------------------------------------

void ShowMsg(int a)
{
    STRTYPE Buff[256];
    itoa(a, Buff, 10);
    MessageBoxA(NULL, Buff, "调试提示", 0);
}
//---------------------------------------------------------------------------

void StrCopy(PSTRTYPE &Str1, PSTRTYPE Str2)
{   // 说明:创建Str1,并把Str2拷贝到Str1中
    if (Str1) 
    {
        delete Str1;        
    }

    int n = StrLen(Str2);
    Str1 = new STRTYPE[n+1];
    Str1[n] = '\0';
    
    _tcscpy(Str1, Str2);
}
//---------------------------------------------------------------------------

int AnsiPos(PSTRTYPE S, STRTYPE C)
{   // 在字符串S中查找字符C第一次出现的位置,并返回该位置的序号。
    // 如果S中第一个字符即是C,则返回0;如果第二个字符为C,则返回1;...
    // 如果S中根本就没有C,则返回-1。
    int nLen = StrLen(S);
    for (int i=0; i<nLen; i++)
    {
        if (S[i] == C)
        {
            return i;
        }
    }
    return -1;
}
//---------------------------------------------------------------------------

void StrNCopy(PSTRTYPE Dest, PSTRTYPE Source, int n)
{   // 从源字符串Surce的第一个字符开始拷贝n个字符到目标字符串Dest中
    // 2006.02.19

    if (!Dest || !Source || n==0)
    {
        return;
    }

    int i=0, m = StrLen(Dest), k = StrLen(Source);
    for (i=0; i<n && i<m && i<k; i++)
    {
        Dest[i] = Source[i];
    }
    
    Dest[i] = '\0';
}
//---------------------------------------------------------------------------

void StrStartEndCopy(PSTRTYPE &Dest, PSTRTYPE Source, int Start, int End)
{   // 从源字符串Surce的第Start个字符开始到End结束拷贝End-Start个字符到
    // 目标字符串Dest中,如:
    // Surce : ABCDEFG  Strat = 2, End = 5
    // 则拷贝后Dest为:CDE 
    // 2006.02.19
    if (!Dest || !Source || End<Start)
    {
        return;
    }

    int i=0;
    PSTRTYPE temp = new STRTYPE[End-Start+1];
    temp[End-Start]='\0';

    for (i=0; i<End-Start; i++)
    {
        temp[i] = Source[i+Start];
    }
    
    temp[i] = '\0'; 
    Dest = temp;
}
//---------------------------------------------------------------------------

/****************************************************************************
*                                                                           *
*   函数名称:CSkyRainReg                                                   *
*                                                                           *
*   隶属对象:CSkyRainReg : public                                          *
*                                                                           *
*   用    法:CSkyRainReg(LPTSTR AFileName)                                 *
*                                                                           *
*   实现功能:构造函数进行数据成员初始化,创造根结点                         *
*                                                                           *
*   参数说明:AFileName 天雨注册表文件名 包括全路径名                       *
*                                                                           *
*   返 回 值:无                                                            *
*                                                                           *
*   日    期:2006.02.15                                                    *
*                                                                           *
****************************************************************************/
CSkyRainReg::CSkyRainReg(PSTRTYPE AFileName)
{
    Root     = NULL;
    FileName = NULL;
    NewValue = NULL;
    CreateRoot();
    StrCopy(FileName, AFileName);
    
	// 如果指定的文件不存在则利用Save()方法创建一个新的文件
	// 并进行天雨注册表初始化
    if (LoadFromFile(FileName) == lfaFileNotExist)
    {
        // 文件不存在,利用Save()创建一个新的文件
        Save();
    }
}
//---------------------------------------------------------------------------

/****************************************************************************
*                                                                           *
*   函数名称:~CSkyRainReg                                                  *
*                                                                           *
*   隶属对象:CSkyRainReg : public                                          *
*                                                                           *
*   用    法:~CSkyRainReg()                                                *
*                                                                           *
*   实现功能:析构造函数释放数据成员所占据的空间                            *
*                                                                           *
*   参数说明:无                                                            *
*                                                                           *
*   返 回 值:无                                                            *
*                                                                           *
*   日    期:2006.02.15                                                    *
*                                                                           *
****************************************************************************/
CSkyRainReg::~CSkyRainReg(void)
{
	// 删除二叉树链表中的所有结点 
    OpenKeyPtr = NULL;
    DeleteBiTreeNode(Root->SubKey);
}
//---------------------------------------------------------------------------

/****************************************************************************
*                                                                           *
*   函数名称:CreateRoot                                                    *
*                                                                           *
*   隶属对象:CSkyRainReg : private                                         *
*                                                                           *
*   用    法:bool CreateRoot(void)                                         *
*                                                                           *
*   实现功能:创建二叉树的根结点                                            *
*                                                                           *
*   参数说明:无                                                            *
*                                                                           *
*   返 回 值:若创建二叉树的根结点Root成功则返回TRUE,否则返回FALSE          *
*                                                                           *
*   日    期:2006.02.15                                                    *
*                                                                           *
****************************************************************************/
bool CSkyRainReg::CreateRoot(void)
{
	if (Root != NULL) 
	{
		DestoryRoot();
	}
	
    Root = new REGKEY;			            // 创建一个新的根结点
	if (Root == NULL)						// 内存不足,不能进行创建操作
	{
		return FALSE;
	}

	Root->Name = MAIN_ROOT_KEY_NAME;
    Root->Info = new SkyRain::CNodeInfo;
    Root->Info->cFlag = hsnHAVE;			// 表示有子树结点

	OpenKeyPtr = Root;      				// 当前指针
    return TRUE;
}
//---------------------------------------------------------------------------

/****************************************************************************
*                                                                           *
*   函数名称:DestoryRoot                                                   *
*                                                                           *
*   隶属对象:CSkyRainReg : private                                         *
*                                                                           *
*   用    法:void DestoryRoot(void)                                        *
*                                                                           *
*   实现功能:销毁二叉树的根结点                                            *
*                                                                           *
*   参数说明:无                                                            *
*                                                                           *
*   返 回 值:无                                                            *
*                                                                           *
*   日    期:2003.12.16 -- 2006.02.15                                      *
*                                                                           *
****************************************************************************/
void CSkyRainReg::DestoryRoot(void)
{
    if (Root != NULL)
    {
		delete Root;
		Root = NULL;
    }
}
//---------------------------------------------------------------------------

/****************************************************************************
*                                                                           *
*   函数名称:GetSubKeyCount                                                *
*                                                                           *
*   隶属对象:CSkyRainReg : public                                          *
*                                                                           *
*   用    法:int GetSubKeyCount(void)                                      *
*                                                                           *
*   实现功能:返回当前主键第一层中的子主键的个数                         *
*                                                                           *
*   参数说明:无                                                            *
*                                                                           *
*   返 回 值:返回当前主键的子主键的个数                                    *
*                                                                           *
*   日    期:2006.01.27 -- 2006.02.15                                      *
*                                                                           *
****************************************************************************/
int CSkyRainReg::GetSubKeyCount(void)
{
	int i=0;
	PREGKEY pNode = OpenKeyPtr->SubKey;

	while (pNode)
    {
        i++;
        pNode = pNode->SibKey;
	}

    return i;
}
//---------------------------------------------------------------------------

/****************************************************************************
*                                                                           *
*   函数名称:GetDataValueCount                                             *
*                                                                           *
*   隶属对象:CSkyRainReg : public                                          *
*                                                                           *
*   用    法:int GetDataValueCount(void)                                   *
*                                                                           *
*   实现功能:返回当前主键中的键值的个数                                    *
*                                                                           *
*   参数说明:无                                                            *
*                                                                           *
*   返 回 值:返回当前主键中的键值的个数                                    *
*                                                                           *
*   日    期:2003.12.16 -- 2006.02.15                                      *
*                                                                           *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -