IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 稀疏矩阵-正交链表表示 -> 正文阅读

[数据结构与算法]稀疏矩阵-正交链表表示

//自己写出来的,测试过
#include<stdio.h>
#include<stdlib.h>
#define MaxSize  100
typedef   enum { H, E }   TagField;
typedef struct term {
	int row, col, value;
}Term;
typedef struct mnode {
	struct mnode* Right, * Down;
	TagField Tag;
	union {
		struct mnode* Next;
		Term Element;
	}U;
}MNode;
typedef struct linkedmatrix {
	MNode* Head;
	MNode* HD[MaxSize];
}LinkedMatrix;
MNode* NewNode() {
	MNode* temp = (MNode*)malloc(sizeof(MNode));
	temp->Down = NULL;
	temp->Right = NULL;
	return temp;
}
//建立正交链表
LinkedMatrix  MRead(void) {
	int rows, cols, nozeros, heads;
	int row, col, value, current_row, i;
	MNode* ptemp, * prow_last, *pcol_last, * pnode, * Temp;
	LinkedMatrix A;
	printf("Enter tyhe number of rows, columns  and number of nozero terms:  ");
	scanf_s("%d%d%d", &rows, &cols, &nozeros);
	//建立正交链表的表头结点
	heads = (cols > rows) ? cols : rows;
	pnode = NewNode();
	pnode->Tag = E;
	pnode->U.Element.row = rows;
	pnode->U.Element.col = cols;
	pnode->U.Element.value = nozeros;
	pnode->Down = NULL;
	A.Head = pnode;
	Temp = A.Head;
	if (!heads) {
		pnode->Right=pnode;
	}
	else {
		//建立heads 个行/列表头结点, 形成一个包含有Heads个元素的包含有表头节点的空循环链表,
		for (i = 0; i < heads; i++) {
			A.HD[i] = NewNode();
			A.HD[i]->Tag = H;
			A.HD[i]->Right = A.HD[i];
			A.HD[i]->Down = A.HD[i];
			if (i==0) {
				Temp->Right = A.HD[i];
			}
			else {
				Temp->U.Next = A.HD[i];
			}
			Temp = A.HD[i];
		}
		Temp->U.Next = A.Head;
		//包含有Heads个元素的包含有表头节点的空循环链表创建完成
		//从第0行起,按行插入非0元素
		for (i = 0; i < nozeros;i++) {
			printf("Enter row , col   and  value: ");
			scanf_s("%d%d%d", &row, &col, &value);
			ptemp = NewNode();
			ptemp->Tag = E;
			ptemp->U.Element.row = row;
			ptemp->U.Element.col = col;
			ptemp->U.Element.value = value;
			ptemp->Right = A.HD[row];
			ptemp->Down = A.HD[col];

			prow_last = A.HD[row];
			for (; prow_last->Right != A.HD[row]; prow_last = prow_last->Right);
			prow_last->Right = ptemp;
			prow_last = ptemp;

			pcol_last=A.HD[col];
			for (; pcol_last->Down != A.HD[col]; pcol_last = pcol_last->Down);
			pcol_last->Down=ptemp;
			pcol_last=ptemp;
		}

	}
	return A;
}
//打印正交链表
void PrintLinkedMatrix(LinkedMatrix A) {
	MNode* ptemp, * prow_temp;
	ptemp = A.Head->Right;
	for (; ptemp != A.Head; ptemp= ptemp->U.Next) {
		prow_temp = ptemp->Right;
		for (; prow_temp != ptemp; prow_temp = prow_temp->Right) {
			printf("%d    %d    %d\n", prow_temp->U.Element.row, prow_temp->U.Element.col, prow_temp->U.Element.value);
		}
	}
}
void main() {
	LinkedMatrix A = MRead();
	PrintLinkedMatrix(A);
	system("pause");
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:37:09  更:2021-11-23 12:39:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/30 9:46:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码