📄 linklist_def.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 + -