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

📄 linklist_def.cpp

📁 我写的二维链表程序(采用非递归算法实现了二维链表程序),大家可以自由使用!如果有更好的算法请给我回复.
💻 CPP
字号:
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "iomanip.h"
//#include "definite.h"
#define TRUE   1;
#define FALSE -1;
typedef  int  Datatype ;//数据域类型(也可为其他合适类型)
typedef struct Lnode {
   int index; //索引域
   Datatype  *data;//数据指针
   struct Lnode *pnext;//结点指针,指向下一结点
}Lnode,*plinklist;

typedef struct Llist {
   int nodenum; //结点数
   Lnode  *HeadNode ;//头结点指针
}Llist;
///////////////////////////////////////////////////////////////////////
//typedef  loat  Datatype //数据域类型(也可为其他合适类型)
typedef struct Two_Dim_Lnode {
   int row, col ;//行、列索引
   Datatype  data;//数据
   struct Two_Dim_Lnode  *prow, *pcol;//行、列指针
} Two_Dim_Lnode,*PTwo_Dim_Lnode ;

typedef struct  Two_Dim_Link {
     int rownum,colnum;//链表行、列数
     Two_Dim_Lnode  *HeadNode ;//头结点指针
   } Two_Dim_Link;
///////////////////////////////////////////////////////////////////////
int CreateTwo_Dim_Link(int rownum, int colnum, Two_Dim_Link *linkHead)
{   PTwo_Dim_Lnode pHeadNode;
	PTwo_Dim_Lnode  pLinetempnode,pnode, prownode,pcolnode;
	linkHead->colnum =colnum;
	linkHead->rownum =rownum;
///////////////////////////////////////////////////////////////////////
	pHeadNode=(Two_Dim_Lnode*)malloc(sizeof(Two_Dim_Lnode));//pHeadNode
	if (pHeadNode==NULL)
	{
			cout<<"内存不足";
			return FALSE;
	}
	pHeadNode->col =0;
	pHeadNode->row =0;
	pHeadNode->data =0;//数据域
	pHeadNode->pcol =NULL;
	pHeadNode->prow =NULL;

    linkHead->HeadNode =pHeadNode;
	/////////////////////////////////////////////////////
	pLinetempnode=pHeadNode;
///////////////////////////////////////////////////////////////////////
	for(int k=1;k<colnum;k++)
	{
		pnode=(Two_Dim_Lnode*)malloc(sizeof(Two_Dim_Lnode));//pnode
		if (pnode==NULL)
		{
			cout<<"内存不足";
			return FALSE;
		}
		pnode->col =k;
		pnode->row =0;
		pnode->data =k;//数据域
		pnode->pcol =NULL;
		pnode->prow =NULL;
		pLinetempnode->prow =pnode;
        pLinetempnode=pnode;
    }
	//////////////////////////////////////////////////////////////////
	pLinetempnode=linkHead->HeadNode;
	for (int i=1;i<rownum;i++)
	{   		
		//////////////////////////////////////////////////////////////
		pnode=(Two_Dim_Lnode*)malloc(sizeof(Two_Dim_Lnode));//pnode
		if (pnode==NULL)
		{
			cout<<"内存不足";
			return FALSE;
		}
        pnode->col =0;
		pnode->row =i;
		pnode->data =i;//数据
		pnode->pcol =NULL;
		pnode->prow =NULL;
		pLinetempnode->pcol=pnode;
		//////////////////////////////////////////////////////////////
		pcolnode=pLinetempnode->prow ;//新结点的同列前一结点
		prownode=pLinetempnode->pcol ;//新结点的同行前一结点
		//////////////////////////////////////////////////////////////
		for (int j=1;j<colnum;j++)
		{
			pnode=(Two_Dim_Lnode*)malloc(sizeof(Two_Dim_Lnode));//pnode
			if (pnode==NULL)
			{
					cout<<"内存不足";
					return FALSE;
			}
            pnode->col =j;
			pnode->row =i;
			pnode->data =i*j;//数据
			pnode->pcol =NULL;
			pnode->prow =NULL;

			pcolnode->pcol =pnode;
			prownode->prow =pnode;

			pcolnode=pcolnode->prow ;
			prownode=prownode->prow;
		}
		pLinetempnode=pLinetempnode->pcol ;
	}
	return TRUE;
}

Two_Dim_Lnode GetNode(int row, int col, Two_Dim_Link *linkHead)
{
	Two_Dim_Lnode *tempnode;
	tempnode=linkHead->HeadNode;
	for (int i=0;i<row;i++)
        tempnode=tempnode->pcol;
    for(int j=0;j<col;j++)
		tempnode=tempnode->prow;
	return *tempnode;
}

bool AddALine(Two_Dim_Link *linkHead)
{
	PTwo_Dim_Lnode tempnode,prownode,pcolnode,pHeadNode,pnode;
	
	///////////////////////////////////////////////////////
	pHeadNode=(Two_Dim_Lnode*)malloc(sizeof(Two_Dim_Lnode));//pHeadNode
	if (pHeadNode==NULL)
	{
			cout<<"内存不足";
			return FALSE;
	}
	pHeadNode->col =0;
	pHeadNode->row =linkHead->rownum;
	pHeadNode->data =linkHead->rownum;//数据域
	
	pHeadNode->pcol =NULL;
	pHeadNode->prow =NULL;
	///////////////////////////////////////////////////////
	tempnode=linkHead->HeadNode ;
	for(int i=0;i<linkHead->rownum-1;i++)
	{
		tempnode=tempnode->pcol;
	}
	tempnode->pcol =pHeadNode;

	pcolnode=tempnode->prow ;
	prownode=tempnode->pcol ;
    ////////////////////////////////////////////////////////
	for(int j=1;j<linkHead->colnum ;j++)
	{
		pnode=(Two_Dim_Lnode*)malloc(sizeof(Two_Dim_Lnode));//tempnode
		if (pnode==NULL)
		{
			cout<<"内存不足";
			return FALSE;
		}
        pnode->col =j;
	    pnode->row =linkHead->rownum;
		pnode->data =linkHead->rownum*j;//数据
		pnode->pcol =NULL;
		pnode->prow =NULL;

		pcolnode->pcol =pnode;
		prownode->prow =pnode;

		pcolnode=pcolnode->prow ;
		prownode=prownode->prow;	
	}
	linkHead->rownum=linkHead->rownum+1;//
	return TRUE;
}

void DeleteALine(int RowNo,Two_Dim_Link *linkHead)
{
	PTwo_Dim_Lnode pnode,pdelnode;
	pnode=linkHead->HeadNode ;
	if (RowNo>0){
		for(int i=1;i<RowNo;i++){
			pnode=pnode->pcol ;
		}
		pdelnode=pnode->pcol;
		
		for (int j=0;j<linkHead->colnum;j++){ 
			pnode->pcol =pnode->pcol->pcol ;
			pnode=pnode->prow ;
		}
	}
	else {
		pdelnode=linkHead->HeadNode;
		linkHead->HeadNode=pdelnode->pcol ;
	}
	////////////////////////////////////////////////////////////
    for(int k=0;k<linkHead->colnum ;k++){
		pnode=pdelnode;
		pdelnode=pdelnode->prow ;
		delete(pnode);
	}
	////////////////////////////////////////////////////////////
	linkHead->rownum--;
	////////////////////////////////////////////////////////////

}

void DeleteTwo_Dim_Link(Two_Dim_Link *linkHead)
{

}

void main()
{
	Two_Dim_Link *linkHead1;
	Two_Dim_Lnode pT_D_Lnode;
	linkHead1=(Two_Dim_Link *)malloc(sizeof(Two_Dim_Link));
	if (linkHead1==NULL) 
	{
		cout<<"内存不足";
	}
	if (CreateTwo_Dim_Link(5, 5, linkHead1)>0) 
	{
		if (AddALine(linkHead1)>0)
		if (AddALine(linkHead1)>0)
		for (int i=0;i<7;i++)
		{
			for(int j=0;j<5;j++)
			{
				pT_D_Lnode=GetNode(i, j, linkHead1);
				cout<<pT_D_Lnode.data<<setw(5);
			}
			cout<<endl;
		}
	}
	else 
		cout<<"default of create double linkedlist"<<endl;
}

⌨️ 快捷键说明

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