学习笔记------数据结构(C语言版)数组之十字链表

//CrossList.cpp


#include"predefined.h"
#include"CrossList.h"

Status InitSMatrix(CrossList *M) /* 加 */
 { /* 初始化M(CrossList类型的变量必须初始化,否则创建、复制矩阵将出错) */
   (*M).rhead=(*M).chead=NULL;
   (*M).mu=(*M).nu=(*M).tu=0;
   return OK;
 }

Status CreateSMatrix_OL(CrossList *M)
//算法5.4:创建稀疏矩阵,采用十字链表存储表示
{
	int m,n,t,i,j,k;
	ElemType e;
	OLink p,q;
	printf("请输入行,列,非零元个数:");
	scanf("%d,%d,%d",&m,&n,&t);
	(*M).mu=m;
	(*M).nu=n;
	(*M).tu=t;
	if(!((*M).rhead=(OLink *)malloc((m+1)*sizeof(OLink))))
		exit(OVERFLOW);
	if(!((*M).chead=(OLink*)malloc((n+1)*sizeof(OLink))))
		exit(OVERFLOW);
	for(i=0;i<=m;i++)
		(*M).rhead[i]=NULL;
	for(j=0;j<=n;j++)
		(*M).chead[j]=NULL;
	printf("请按任意次序输入%d个非零元的行,列,元素值:\n",(*M).tu);
	for(k=0;kj)
		{
			(*p).right=(*M).rhead[i];
			(*M).rhead[i]=p;
		}
		else
		{
			for(q=(*M).rhead[i];(*q).right&&(*(*q).right).ji)
		{
			(*p).down=(*M).chead[j];
			(*M).chead[j]=p;
		}
		else
		{
			for(q=(*M).chead[j];(*q).down&&(*(*q).down).ii,p->j,p->e);
                 p=p->right;
               }
             }
             break;
     case 2: for(j=1;j<=M.nu;j++)
             {
               p=M.chead[j];
               while(p)
               {
                 printf("%d行%d列值为%d\n",p->i,p->j,p->e);
                 p=p->down;
               }
             }
   }
   return OK;
 }


//CrossList.h

typedef int ElemType;
typedef struct OLNode
{
	int i,j;
	ElemType e;
	struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
	OLink *rhead,*chead;
	int mu,nu,tu;
}CrossList;

Status InitSMatrix(CrossList *M);

Status CreateSMatrix_OL(CrossList *M);

Status PrintSMatrix(CrossList M);


你可能感兴趣的:(学习笔记---数据结构)