📄 三维链表的算法实现.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "iomanip.h"
//#include "definite.h"
#include "dos.h"
#define TRUE 1;
#define FALSE 0;
typedef int Datatype ;//数据域类型(也可为其他合适类型)
///////////////////////////////////////////////////////////////////////
//typedef loat Datatype //数据域类型(也可为其他合适类型)
typedef struct Three_Dim_Lnode {
Datatype data;//数据
struct Three_Dim_Lnode *px, *py,*pz;//各维指针域
} Three_Dim_Lnode,*pThree_Dim_Lnode ;
typedef struct Three_Dim_Link {
int xnum,ynum,znum;//链表各维深度
Three_Dim_Lnode *HeadNode ;//顶点指针
} Three_Dim_Link;
///////////////////////////////////////////////////////////////////////
bool CreateThree_Dim_Link_line(int xnum,Three_Dim_Lnode **pLineHead)
{
Three_Dim_Lnode *pLineNode,*pLineNodeTemp;
pLineNode=(Three_Dim_Lnode *)malloc(sizeof(Three_Dim_Lnode));
if (pLineNode==NULL ) return FALSE;
pLineNode->px=NULL;
pLineNode->py=NULL;
pLineNode->pz=NULL;
pLineNode->data=0;
*pLineHead=pLineNode; //记录链表头
////////////////////////////////////////////////////////////////////
for(int i=1;i<xnum;i++){
pLineNodeTemp=(Three_Dim_Lnode *)malloc(sizeof(Three_Dim_Lnode));
if (pLineNodeTemp==NULL) return FALSE;
pLineNodeTemp->px=NULL;
pLineNodeTemp->py=NULL;
pLineNodeTemp->pz=NULL;
pLineNodeTemp->data=0;
pLineNode->px=pLineNodeTemp;
pLineNode=pLineNodeTemp;
}
return TRUE;
}
bool CreateThree_Dim_Link_Area(int xnum,int ynum,Three_Dim_Lnode **pAreaHead)
{
Three_Dim_Lnode *pLineHead,*pLineHeadTemp,*pLineHeadTemp0;
if (CreateThree_Dim_Link_line(xnum,&pLineHead)==0) return FALSE;
*pAreaHead=pLineHead; //记录二维链的顶点指针
for(int i=1;i<ynum;i++){
pLineHeadTemp0=pLineHead;
if (CreateThree_Dim_Link_line(xnum,&pLineHeadTemp)==0) return FALSE;
pLineHead=pLineHeadTemp;//记录第二链的头指针
for(int j=0;j<xnum;j++){
pLineHeadTemp0->py=pLineHeadTemp;
pLineHeadTemp0=pLineHeadTemp0->px;
pLineHeadTemp =pLineHeadTemp->px;
}
}
return TRUE;
}
bool CreateThree_Dim_Link(int xnum,int ynum,int znum, Three_Dim_Lnode **pLinkHead)
{
Three_Dim_Lnode *pAreaHead,*pAreaHeadTemp00,*pAreaHeadTemp01,*pAreaHeadTemp10,*pAreaHeadTemp11;
if (CreateThree_Dim_Link_Area(xnum,ynum,&pAreaHead)==0) return FALSE; //新建第一层节点
*pLinkHead=pAreaHead; //
for(int i=1;i<znum;i++){
pAreaHeadTemp00=pAreaHead;
pAreaHeadTemp01=pAreaHeadTemp00;
if (CreateThree_Dim_Link_Area(xnum,ynum,&pAreaHeadTemp10)==0) return FALSE; //新建一层节点
pAreaHead=pAreaHeadTemp10;
pAreaHeadTemp11=pAreaHeadTemp10;
for(int j=0;j<ynum;j++) {
for(int k=0;k<xnum;k++){
pAreaHeadTemp01->pz=pAreaHeadTemp11;
pAreaHeadTemp01=pAreaHeadTemp01->px;
pAreaHeadTemp11=pAreaHeadTemp11->px;
}
pAreaHeadTemp01=pAreaHeadTemp00->py;
pAreaHeadTemp11=pAreaHeadTemp10->py;
pAreaHeadTemp00=pAreaHeadTemp01;
pAreaHeadTemp10=pAreaHeadTemp11;
}
}
}
Three_Dim_Lnode* GetNode(int x,int y,int z ,Three_Dim_Lnode *pLinkHead)
{
Three_Dim_Lnode *pLinkNode;
pLinkNode=pLinkHead;
for (int i=0;i<x;i++){
pLinkNode=pLinkNode->px;
}
for (int j=0;j<y;j++){
pLinkNode=pLinkNode->py;
}
for (int k=0;k<z;k++){
pLinkNode=pLinkNode->pz;
}
return pLinkNode;
}
Datatype GetNodeData(int x,int y,int z,Three_Dim_Lnode *pLinkHead)
{
Three_Dim_Lnode *pNode;
pNode=GetNode(x,y,z,pLinkHead);
return (pNode->data);
}
void SetNodeData(int x, int y,int z, Three_Dim_Lnode *pLinkHead, Datatype data)
{
Three_Dim_Lnode *pNode;
pNode=GetNode(x,y,z,pLinkHead);
pNode->data=data;
}
void main()
{
Three_Dim_Lnode *pLinkHead ;
int xn=500,yn=500,zn=200;
///////////////////////////
struct time tm;
///////////////////////////////////////////////////////////////////////////////////////////
//获得系统时间
gettime(&tm);
cout<<int(tm.ti_hour)<<":"<<int(tm.ti_min)<<":"<<int(tm.ti_sec)<<":"<<int(tm.ti_hund)<<endl;
///////////////////////////////////////////////////////////////////////////////////////////
if (CreateThree_Dim_Link(xn,yn,zn,&pLinkHead)==0){
cout<<"内存不足"<<endl;
cout<<"输入一个字符退出程序"<<endl;
getchar();
exit;
}
///////////////////////////////////////////////////////////////////////////////////////////
//获得系统时间
gettime(&tm);
cout<<int(tm.ti_hour)<<":"<<int(tm.ti_min)<<":"<<int(tm.ti_sec)<<":"<<int(tm.ti_hund)<<endl;
///////////////////////////////////////////////////////////////////////////////////////////
/*for(int i=0;i<xn;i++)
for(int j=0;j<yn;j++)
for(int k=0;k<zn;k++)
SetNodeData(i,j,k, pLinkHead,(i+1)*(j+1)*(k+1)) ; */
SetNodeData(140,140,130, pLinkHead,2000) ;
///////////////////////////////////////////////////////////////////////////////////////////
//获得系统时间
gettime(&tm);
cout<<int(tm.ti_hour)<<":"<<int(tm.ti_min)<<":"<<int(tm.ti_sec)<<":"<<int(tm.ti_hund)<<endl;
///////////////////////////////////////////////////////////////////////////////////////////
//SetNodeData(4,2,2, pLinkHead,123) ;
for(int i=0;i<xn;i++){
for(int j=0;j<yn;j++)
for(int k=0;k<zn;k++) ;
//cout<<setw(6)<<GetNodeData(i,j,k,pLinkHead)<<setw(6);
//cout<<endl;
}
cout<<GetNodeData(140,140,130,pLinkHead)<<endl;
///////////////////////////////////////////////////////////////////////////////////////////
//获得系统时间
gettime(&tm);
cout<<int(tm.ti_hour)<<":"<<int(tm.ti_min)<<":"<<int(tm.ti_sec)<<":"<<int(tm.ti_hund)<<endl;
///////////////////////////////////////////////////////////////////////////////////////////
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -