数据结构--数组--稀疏矩阵的建立
来源:互联网 发布:微信扫号器数据 编辑:程序博客网 时间:2024/06/05 04:00
稀疏矩阵的建立
#include "stdio.h"#define MAX_SIZE 50 /* 最大的稀疏矩阵 */typedef enum {head, entry} tagfield; //行链表的头指针和列链表的头指针struct entry_node { //非零元节点 int row; //非零元所在行的下标 int col; //非零元所在列的下标 int value; //非零元的数值};typedef struct Matrix { //矩阵 struct Matrix* down; //非零元所在列表的后继区域 struct Matrix *right; //非零元所在行表的后继区域 tagfield tag; //行列头指针 union { struct Matrix * next; struct entry_node entry; } u;}matrix_node;typedef matrix_node * matrix_pointer;matrix_pointer hdnode [ MAX_SIZE ];matrix_pointer new_node(void) //定义新node,并分配存储空间{ matrix_pointer temp;temp = (matrix_pointer)malloc(sizeof(matrix_node));if (temp==NULL) { printf("The memory is full\n"); exit(1);}return temp;} matrix_pointer Create(void){ int num_rows, num_cols, num_terms, num_heads, i,current_row; int col,value,row;matrix_pointernode,temp,last; printf("Enter the number of rows, columns and number of nonzero terms: "); scanf("%d%d%d",&num_rows,&num_cols,&num_terms); num_heads = (num_cols > num_rows) ? num_cols :num_rows;/* 建立新结点 */ node = new_node(); node->tag = entry; node->u.entry.row = num_rows; node->u.entry.col = num_cols;if ( !num_heads )node->right = node; else { for ( i = 0; i<num_heads; i++ ) { temp = new_node(); hdnode[i] = temp;hdnode[i]->tag = head; hdnode[i]->right = temp; hdnode[i]->u.next = temp;} current_row = 0;last = hdnode[0];for ( i = 0; i < num_terms; i++ ) { printf("Enter row, column and value: "); scanf("%d%d%d",&row,&col,&value); if ( row > current_row ) { /* 转到row所在行去*/ last->right = hdnode[current_row]; current_row = row; last = hdnode[row];} temp = new_node(); temp->tag = entry; temp->u.entry.row = row; temp->u.entry.col = col; temp->u.entry.value = value; last->right = temp; last = temp;/*链接到列结点上 */ hdnode[col]->u.next->down = temp; hdnode[col]->u.next = temp; }/* 结束上一行结点 */ last->right = hdnode[current_row]; /*结束所有行结点*/ for ( i=0; i<num_cols; i++ )hdnode[i]->u.next->down= hdnode[i]; /*链接所有的头结点 */ for ( i=0; i<num_heads-1; i++ ) hdnode[i]->u.next = hdnode[i+1]; hdnode[num_heads-1]->u.next = node; node->right = hdnode[0]; } return node;} void main(){matrix_pointer matric = Create();}
稀疏矩阵的删除
#include "stdio.h"#define MAX_SIZE 50 /* 最大的稀疏矩阵 */typedef enum {head, entry} tagfield;struct entry_node { int row; int col; int value;};typedef struct Matrix {struct Matrix* down; struct Matrix *right; tagfield tag; union { struct Matrix * next; struct entry_node entry; } u;}matrix_node;typedef matrix_node * matrix_pointer;matrix_pointer hdnode [ MAX_SIZE ];matrix_pointer new_node(void){ matrix_pointer temp;temp = (matrix_pointer)malloc(sizeof(matrix_node));if (temp==NULL) {printf("The memory is full\n");exit(1);}return temp;} matrix_pointer Create(void){ int num_rows, num_cols, num_terms, num_heads, i,current_row; int col, value,row;matrix_pointernode,temp,last; printf("Enter the number of rows, columns and number of nonzero terms: "); scanf("%d%d%d",&num_rows,&num_cols,&num_terms); num_heads = (num_cols > num_rows) ? num_cols :num_rows;/* 建立新结点 */ node = new_node(); node->tag = entry; node->u.entry.row = num_rows; node->u.entry.col = num_cols;if ( !num_heads )node->right = node; else {/*初始化头结点如图5-5-4*/ for ( i = 0; i<num_heads; i++ ) { temp = new_node(); hdnode[i] = temp;hdnode[i]->tag = head; hdnode[i]->right = temp; hdnode[i]->u.next = temp;} current_row = 0;last = hdnode[0];for ( i = 0; i < num_terms; i++ ) { printf("Enter row, column and value: "); scanf("%d%d%d",&row,&col,&value); if ( row > current_row ) { /* 转到row所在行去*/ last->right = hdnode[current_row]; current_row = row; last = hdnode[row];} temp = new_node(); temp->tag = entry; temp->u.entry.row = row; temp->u.entry.col = col; temp->u.entry.value = value;/* 链接到行结点上如图5-5-5所示 */ last->right = temp; last = temp;/*链接到列结点上 */ hdnode[col]->u.next->down = temp; hdnode[col]->u.next = temp; }/* 结束上一行结点 */ last->right = hdnode[current_row]; /*结束所有行结点*/ for ( i=0; i<num_cols; i++ )hdnode[i]->u.next->down= hdnode[i]; /*链接所有的头结点 */ for ( i=0; i<num_heads-1; i++ ) hdnode[i]->u.next = hdnode[i+1]; hdnode[num_heads-1]->u.next = node; node->right = hdnode[0]; } return node;} void erase(matrix_pointer *node){matrix_pointer x,y,head = (*node)->right;int i;/* 遍历每行,删除元素结点和头结点 */for ( i = 0; i< (*node)->u.entry.row; i++ ) {y = head->right;while ( y != head ) {x = y; y = y->right; free(x);}x = head; head = head->u.next; free(x);}/* 删除剩余的头结点*/y = head;while ( y != *node ) {x = y; y = y->u.next; free(x);}free(*node); *node = NULL;}void main(){matrix_pointer matric=Create();erase(&matric);}
- 数据结构--数组--稀疏矩阵的建立
- 数据结构--数组--三角矩阵的建立
- 数据结构--数组--对称矩阵的建立
- 数据结构学习 第一章数组和稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构2-数组和稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 开开心心学算法--十进制转任意进制
- 屌丝男面试过程
- android中 判断service是否在运行
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)
- QQ协议分析二
- 数据结构--数组--稀疏矩阵的建立
- Windows转Linux注意事项
- 《Windows环境下的多线程编程原理与应用》的学习笔记
- tomcat的问题
- java actor模型和消息传递简单示例
- Android软件开发之EditText 详解(八)
- wpf 反编译
- org.hibernate.TransientObjectException: The given object has a null identifier: cn.com.cis.acic.sale
- C# 中 json对象与字符串的相互转换