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

📄 三维链表的算法实现.cpp

📁 我的三维链表程序,非递归算法实现,希望各位提出宝贵意见,实际上完全可以从此得出任意多维链表的算法.
💻 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 + -