十字链表(icoding)(土豆土豆皮版本微微调)
首先,感谢土豆土豆皮关于icoding的多篇优秀文章。其次,该文章如有错误,欢迎批评指正共同进步。(欢迎大家cv学习噢,毕竟icoding实在让人恼火~~~)
土豆土豆皮的原版十字链表在2021级icoding中多次提交始终是98%的通过率,主要原因在于:
1.一维数组下标转化为二维数组行标与列表有问题(如下图):
2. del_cross_list函数中,两个for中作为判断条件的值都小了1,导致不能完全遍历十字链表(如下图):
微调之后通过率就变成100%,如下是微调代码:
#include "crosslist.h"
#include <stdio.h>
#include <stdlib.h>int init_cross_list(PCrossList L, const ElemType* A, int m, int n)
{int i;OLink q, p;L->rows = m;L->cols = n;L->nums = 0;if (!(L->rowhead = (OLink*)malloc((m + 1) * sizeof(OLink))))return 0;if (!(L->colhead = (OLink*)malloc((n + 1) * sizeof(OLink))))return 0;for (i = 0; i <= m; i++)L->rowhead[i] = NULL;for (i = 0; i <= n; i++)L->colhead[i] = NULL;for (i = 0; i < m * n; i++) {if (A[i] == 0);else {if (!(p = (OLNode*)malloc(sizeof(OLNode))))return 0;p->col = i%n+1;p->row = (i+1-p->col)/n+1;p->value = A[i];p->right = NULL;L->nums++;p->down = NULL;if (L->rowhead[p->row] == NULL)L->rowhead[p->row] = p;else {q = L->rowhead[p->row];while (q->right != NULL)q = q->right;q->right = p;}if (L->colhead[p->col] == NULL)L->colhead[p->col] = p;else {q = L->colhead[p->col];while (q->down != NULL)q = q->down;q->down = p;}}}return L->nums;
}
int del_cross_list(PCrossList L, ElemType k)
{int count = 0;for (int i = 0; i < L->rows+1; ++i) {OLink p = L->rowhead[i];while (p) {if (p->value == k) {OLink q;for (q = L->rowhead[i]; q != p && q->right != p; q = q->right) {}if (q == p) {L->rowhead[i] = p->right;p = L->rowhead[i];count++;continue;} else {q->right = p->right;p = p->right;count++;continue;}}p = p->right;}}for (int i = 0; i < L->cols+1; ++i) {OLink p = L->colhead[i];while (p != NULL) {if (p->value == k) {OLink q;for (q = L->colhead[i]; q != p && q->down != p; q = q->down) {}if (q == p) {L->colhead[i] = p->down;p = L->colhead[i];free(q);continue;} else {OLink tmp = q->down;q->down = p->down;p = p->down;free(tmp);continue;}}p = p->down;}}return count;
}
十字链表(icoding)(土豆土豆皮版本微微调)相关推荐
- icoding复习4 数组 十字链表
icoding 复习4 1. 矩阵加法 实现三元组表示的两个稀疏矩阵的加法. #define MAXSIZE 100 //假设非零元个数的最大值为100 typedef struct ...
- noj数据结构稀疏矩阵的加法十字链表_数据结构学习(C )稀疏矩阵(十字链表1)
CSDN 先说说什么叫稀疏矩阵. 你说, 这个问题很简单吗, 那你一定不知道中国学术界的嘴皮子仗, 对一个字眼的"抠"将会导致两种相反的结论.这是清华 2000 年的一道考研题:& ...
- 游戏算法-AOI十字链表入门简单版python
AOI十字链表python简单实现,仅用作学习,理解基本原理 AOI一般是C++去实现,本文章python写仅用来入门了解 场景内维护两个实体链表 list_x和list_y 所有实体根据x坐标大小排 ...
- 日撸 Java 三百行(37 天: 十字链表)
注意:这里是JAVA自学与了解的同步笔记与记录,如有问题欢迎指正说明 目录 前言: 一.关于十字链表 1.特殊情况下邻接表的局限 2.十字链表的结构与特点 二.十字链表的代码实现 1.基本属性 2.出 ...
- 稀疏矩阵十字链表表示
类型定义 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAX 100 /*稀疏矩 ...
- 【swjtu】数据结构实验5_基于十字链表的稀疏矩阵转置
实验内容及要求: 编写程序,从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构.其中,m.n分别表示矩阵行数和列数:i, j为非零元素行号和列号.编 ...
- 图十字链表并求度c语言,利用十字链表存储树结构(便于同时求出某一点的入度与出度)------C语言实现...
#include #include #include /* 利用十字链表存储有向图,可用于同时查找某个顶点的出度与入度: */ typedef struct edge{//顶点表 int headve ...
- 稀疏矩阵的三元组表与十字链表存储
三元组表:存储稀疏矩阵的非零元素,以及该元素所在的行.列信息,极大的节省了空间(如相比于一般的二维数组的存储),而且三元组表的某些算法的时间效率也要优于经典算法,如基于三元组表的一次快速转置算法等等 ...
- C++ 十字链表图转java版
C++ 图 #include <iostream> #include <string> #include <queue> #include <stack> ...
最新文章
- otto android,Android Otto调研
- Nature:首个完全复现人眼的仿生眼问世,港科大造出半球形人工视网膜,感光性能超过人眼460倍...
- 终端读写命令 -- read write wall
- [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装bitbucket 5.7.0
- Linux共享文件夹中毒,linux服务器中毒利用Find查找病毒例子
- 《自顶向下网络设计(第3版)》——导读
- Tensorflow(r1.4)API--tf.summary.scalar
- MVC中添加动作过滤器的方法
- Oracle Shared Pool优化思路
- 反病毒工具-LordPE
- Ansys SCDM基本操作
- gin框架使用JWT鉴定权限
- mybatis配置文件 .dtd头部约束 出错报红 【亲测实用,可供参考】
- 【汇正财经】11.7日盘面回顾和行情解析
- 知物由学 | “群控软件”助长黑灰产套利的零和游戏,硬核技术打击隐秘的不公
- Agv、Rgv 车辆控制调度系统开发知识点篇
- vmware之设置共享文件夹
- 计算机博士银行待遇怎么样,博士生入职某银行,晒出行业收入和待遇,网友:我不信...
- 联想创投投资的首个协作机器人:扬天科技完成5000万Pre-A融资
- Navicat连接Linux-MySQL