稀疏矩阵的十字链表创建与打印

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-2-
new 0
2014年7月20日 22:21
} //------------------------总结点(非零)数加1 CL->nums++; }
return CL; } void CrossListDisplay(CrossList *CL,RowOrCol choose) { int i; OLink p; if(choose == RowRight) { printf("行先序输出\n"); printf("row\tcol\tvalue\n"); for(i = 0; i < CL->rows; i++) { if(CL->rowhead[i] != NULL) { p = CL->rowhead[i]; while(p != NULL) { printf("%d\t",p->row); printf("%d\t",p->col); printf("%d\n",p->value); p = p->right; } } } } if(choose == ColDown) { printf("\n列先序输出\n"); for(i = 0; i < CL->cols; i++) { if(CL->colhead[i] != NULL) { p = CL->colhead[i]; while(p != NULL) { printf("%d\t",p->col); printf("%d\t",p->row); printf("%d\n",p->value); p = p->down; } } } }
//--------------------------------所有行指针初始化 CL->rowhead = (OLink *)malloc(rows * sizeof(OLink));//指向存储行指针的空间 if(CL->rowhead == NULL) return NULL; for(i = 0; i < rows; i++) CL->rowhead[i] = NULL; //-------------------------------所有列指针初始化 CL->colhead = (OLink *)malloc(cols * sizeof(OLink)); if(CL->colhead == NULL) return NULL; for(j = 0; j < cols; j++) CL->colhead[j] = NULL; printf("输入所有非零数,行输入为-1时退出输入\n"); //-------------------------------增加结点(非零数) while(1) {
-1-
new 0
2014年7月20日 22:21
p = (OLNode *)malloc(sizeof(OLNode)); printf("亲,请输入行和列与非零数值\n"); ROWGO: printf("行数为: "); scanf("%d",&row); if(row == -1) break; if(row < -1 || row > rows) { printf("行数越界,请重新输入\n"); goto ROWGO; } COLGO: printf("列数为: "); scanf("%d",&col); if(col < 0 || col > cols) { printf("列数越界,请重新输入\n"); goto COLGO; } printf("非零数值为: "); scanf("%d",&value); p->row = row; p->col = col; p->value = value; p->right = NULL; p->down = NULL; //---------------------------添加到这一行的末尾 if(CL->rowhead[row] == NULL) CL->rowhead[row] = p; else { q = CL->rowhead[row]; while(q->right != NULL) { q = q->right; } p->right = q->right; q->right = p; } //-------------------------添加到这一列的末尾 if(CL->colhead[col] == NULL) CL->colhead[col] = p; else { q = CL->colhead[col]; while(q->down != NULL) { q = q->down; } p->down = q->down; q->down = p;
new 0
2014年7月20日 22:21
#include <stdio.h> #include <malloc.h>
enum RowOrCol{RowRight,ColDown}; typedef int ElemType; typedef struct OLNode { int row,col; ElemType value; struct OLNode *down; struct OLNode *right; }OLNode; typedef OLNode* OLink; typedef struct CrossList { OLink *rowhead,*colhead;//指向存储每一行,每一列头指针空间的指针 int rows,cols,nums; //总行数列数,非零总数 }CrossList; CrossList * CreatCrossList(CrossList *CL) { int cols = 0,rows = 0; int row = 0,col = 0,value = 0; int i,j; OLNode *p,*q; //------------------------------十字表初始化 printf("请输入总行数与总列数\n"); scanf("%d",&rows); scanf("%d",&cols); CL->rows = rows; CL->cols = cols; CL->nums = 0;
-4-
-3-
Biblioteka Baiduew 0
2014年7月20日 22:21
} void main() { CrossList *CL; CL = (CrossList *)malloc(sizeof(CrossList)); CL = CreatCrossList(CL); CrossListDisplay(CL,RowRight); printf("编译通过\n"); }
相关文档
最新文档