数据结构——多重链表的实现

news2024/11/24 16:23:08
//多重列表的实现
#include<stdio.h>
#include<stdlib.h>
struct lnode
{
	int row,col,value;
};
//没有用到down指针
//没有用到tag和next指针 
typedef struct node
{
    int tag;//区分头结点(0)和非零元素结点(1)
	struct node* right;
	struct node* down;
	//共用体与结构体的区别在于:修改一个成员会影响其他所有成员(同一时刻只能保存一个成员的值) 
	union
	{
		struct node *next;//头结点 
		struct lnode k;//非零元素结点 
	}con;
}node;
typedef node* dlist;
typedef struct dlist2
{
	dlist z[105];
}dlist2;
//用llist指针找到多个空的头节点 
typedef dlist2* llist;
int js1=0,js[105];//找到链表中每个头节点链接的第一个节点 
llist empty()
{
	int a,b,c;
	printf("请输入矩阵行数:");
	scanf("%d",&a);
	printf("请输入矩阵列数:");
	scanf("%d",&b);
	printf("请输入总元素:");
	scanf("%d",&c);
	llist headnode;
	dlist p_now[105],p_next[105];
	int i,j;int x;
	//分配内存! 
    headnode=(llist)malloc(sizeof(dlist2));
    for(i=1;i<=100;i++) headnode->z[i]=(dlist)malloc(sizeof(node));
	for(i=1;i<=a;i++)
	{
		js1=0;
		for(j=1;j<=b;j++)
		{
			scanf("%d",&x);
			if(x!=0)
			{
				js1++;js[j]++;
				//储存输入的结点 
				p_next[i]=(dlist)malloc(sizeof(node));
				p_next[i]->con.k.row=i;
				p_next[i]->con.k.col=j;
				p_next[i]->con.k.value=x;
				p_next[i]->right=NULL;
				
				p_next[j]=(dlist)malloc(sizeof(node));
				p_next[j]->con.k.row=i;
				p_next[j]->con.k.col=j;
				p_next[j]->con.k.value=x;
				p_next[j]->down=NULL;
				//接入链表(记得特殊处理直接链接头节点的点) 
	            if(js[j]==1) 
	            {
				    headnode->z[j]->down=p_next[j];
				    p_now[j]=headnode->z[j];
			    }
			    else p_now[j]->down=p_next[j];//第j列向下链接
			    if(js1==1)
			    {
			   	    headnode->z[i]->right=p_next[i];
			   	    p_now[i]=headnode->z[i];
			    }
			    else p_now[i]->right=p_next[i];//第i行向右链接 
			    //预备处理后续结点 
				p_now[i]=p_next[i];
				p_now[j]=p_next[j];
			} 
		}
	}
	headnode->z[a+1]=NULL;//为"按行输出"做准备 
	return headnode;
}
void print(llist headnode)
{
	int i;dlist head;
	for(i=1;headnode->z[i]!=NULL;i++)
	{
		//找到一行的头节点 
		head=headnode->z[i];
		head=head->right;
		//输出一行的全部元素 
		while(head!=NULL)
		{
			printf("(%d,%d,%d) ",head->con.k.col,head->con.k.row,head->con.k.value);
			head=head->right;
		}
		printf("\n");
	}
} 
int main()
{
	llist na;
	na=empty();
	printf("输出矩阵:\n");
	print(na); 
	return 0; 
} 

7bf9c9a7691f4d7bafa5814a55b40810.jpg

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库 视图 错误 [22003]: 数据溢出

今天通过DBeaver连接访问达梦数据库的一个视图&#xff0c;报错&#xff1a;错误 [22003]: 数据溢出 经过分析&#xff0c;原因是视图字段的数据类型和原表的数据类型不一致造成的

加密密钥应用范围及特点优势分析

加密密钥是一种用于保护数据和信息安全的重要工具。它通过在数据传输和存储过程中对数据进行加密&#xff0c;使得未经授权的人无法访问和解读数据。加密密钥的应用范围广泛&#xff0c;包括网络通信、电子商务、金融交易、数据存储等领域。安策将对加密密钥的应用范围和特点优…

AP2400 LED电源驱动 降压恒流IC 机场灯 指示灯 交通照明灯

产品描述 AP2400 是一款 PWM 工作模式,高效率、外围简单、外驱功率管&#xff0c;适用于 5-100V输入的高精度降压 LED 恒流驱动芯片。外驱 MOS&#xff0c;最大输出电流可达 6A。AP2400 可实现三段功能切换&#xff0c;通过MODE1/2/3 切换三种功能模式&#xff1a;全亮&#xf…

PyQt5配置踩坑

安装步骤比较简单&#xff0c;这里只说一下我踩的坑&#xff0c;以及希望一些大佬可以给点建议。 一、QtDesigner 这个配置比较简单&#xff0c;直接就能用&#xff0c;我的配置如下图&#xff1a; C:\Users\lenovo\AppData\Roaming\Python\Python311\site-packages\qt5_app…

数据结构——排序算法(C语言)

本篇将详细讲一下以下排序算法&#xff1a; 直接插入排序希尔排序选择排序快速排序归并排序计数排序 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某写关键字的大小&#xff0c;按照递增或递减0排列起来的操作。 稳定性的概念…

海外网红营销:打造热门短视频的秘诀

在当今数字化时代&#xff0c;短视频已成为社交媒体上最热门的内容形式之一。无论是TikTok、Instagram、YouTube还是其他平台&#xff0c;短视频都吸引了海内外网红和品牌的注意。本文将详细探讨海外网红营销中如何打造爆款短视频&#xff0c;以便帮助品牌在竞争激烈的市场中脱…

一些常见分布-正态分布、对数正态分布、伽马分布、卡方分布、t分布、F分布等

目录 正态分布 对数正态分布 伽马分布 伽马函数 贝塔函数 伽马分布 卡方分布 F分布 t分布 附录 参考文献 本文主要介绍一些常见的分布&#xff0c;包括正态分布、对数正态分布、伽马分布、卡方分布、F分布、t分布。给出了分布的定义&#xff0c;推导了概率密度函数&…

Python实现JavaScript中AES加密有关填充问题

1. 先展示一下JS端的格式&#xff08;没找到没混淆的。。。&#xff0c;将就看吧&#xff09; 2. 在python加密中是没有选择填充模式的&#xff0c;需要自己来填充 3. 对加密不懂的朋友可能跟我一样刚开始很懵逼&#xff0c;因为遇到的基本都是pksc7填充模式&#xff0c;但是网…

解析图片文件格式

图片文件幻数 关于JPEG格式 二进制形式打开文件&#xff0c;文件开始字节为FF D8&#xff0c;文件结束两字节为FF D9 JPEG 文件有两种不同的元数据格式&#xff1a;JFIF 和 EXIF。 JFIF 以 ff d8 ff e0 开头&#xff0c;EXIF 以 ff d8 ff e1 开头。 代码示例 private static…

Visual Studio自定义模板参数、备注

模板路径&#xff1a; VS2022 x64&#xff1a;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\ItemTemplatesVS2022 x86&#xff1a;C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\ItemTemplates 一、声明和启用模板…

六、循环表达式

6.1 循环表达式语法 thymeleaf使用th:each属性可以对数组&#xff0c;集合进行循环&#xff0c;此属性用在容器元素上&#xff0c;循环生成子元素。 语法 th:each"循环出的元素 , 循环状态 : 集合或数组" .6.2、数组的循环 示例 在TestServlet中定义一个数组 …

Vue中如何进行自定义动画与动画效果设计(如CSS动画、Web动画)

当我们构建现代的Web应用程序时&#xff0c;动画和过渡效果变得越来越重要。它们可以增强用户体验&#xff0c;使用户界面更具吸引力&#xff0c;并帮助用户更好地理解应用程序的功能。Vue.js是一个流行的JavaScript框架&#xff0c;它提供了许多强大的工具和功能&#xff0c;使…

大数据技术标准推进委员会发布《地球大数据白皮书(2023年)》

导读 地球大数据的应用领域范围广阔&#xff0c;包括生态保护、自然资源管理、气象服务、城市规划、应急容灾等方面&#xff0c;但目前仍处于发展初期&#xff0c;面临着数据来源、结构多样&#xff0c;数据管理门槛高&#xff0c;数据应用场景复杂、落地方法论较少等痛点。如…

Linux系统常用指令篇---(三)

Linux系统常用指令篇—(三) 1.tree指令 ​ tree这条指令需要安装,不是自带就有的. 安装指令:yum -y install tree作用: ​ 以树状图的形式展开目录 2.which指令 which命令用于查找文件 指令在本质上就是可执行程序,因此也属于文件 3.cp指令 语法&#xff1a; cp [选项] …

【力扣每日一题】2023.10.7 股票价格跨度

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一个数组表示不同时间的股票的价格&#xff0c;要我们按照顺序返回每天的股票价格跨度&#xff0c;价格跨度就是股票价格小于或等于…

如何批量获取京东商品详情数据,京东商品详情API接口

批量获取京东商品详情数据可以通过京东开放平台接口来实现。 首先&#xff0c;您需要在京东开放平台注册成为开发者并创建一个应用&#xff0c;获取到所需的App Key和App Secret等信息。然后&#xff0c;使用获取到的App Key和App Secret进行签名和认证&#xff0c;获取Access…

前后端分离计算机毕设项目之基于SpringBoot的旅游网站的设计与实现《内含源码+文档+部署教程》

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

基于SSM+Vue的订餐系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

每日一题 2034. 股票价格波动(中等,有序队列)

思路&#xff1a; 对于最高和最低价格&#xff0c;维护一个有序的存储所有价格的队列即可实现当执行 update 时&#xff0c;将队列中原来的 price 删除&#xff08;如果有的话&#xff0c;且耗时O(logn)&#xff09;&#xff0c;然后再插入新的 price 并保持有序&#xff08;耗…

Elasticsearch:语义搜索快速入门

这个交互式 jupyter notebook 将使用官方 Elasticsearch Python 客户端向你介绍 Elasticsearch 的一些基本操作。 你将使用 Sentence Transformers 进行文本嵌入的语义搜索。 了解如何将传统的基于文本的搜索与语义搜索集成&#xff0c;形成混合搜索系统。在本示例中&#xff0…