icoding的数据结构并没有一个测试代码,其都是直接编写一个函数的形式,因此很难知道自己的实际输出是什么。针对部分题目,我编写了一系列测试代码以供大家进行数据输出的测试。
部分代码来自白zj老师
修改提示
请先将你的代码复制到两个函数中然后修改main函数完成测试样例的输入
**********************
main函数的各项参数含义请参考main函数的注释
#include <stdio.h>
#include <stdlib.h>
//#include "crosslist.h"
typedef int ElemType;
typedef struct OLNode
{
int row, col;
ElemType value;
struct OLNode* right, * down;
}OLNode, * OLink;
typedef struct
{
OLink* rowhead, * colhead;
int rows, cols, nums;
}CrossList, * PCrossList;
/*
修改提示
请先将你的代码复制到两个函数中然后修改main函数完成测试样例的输入
**********************
main函数的各项参数含义请参考main函数的注释
*/
int init_cross_list(PCrossList L, const ElemType *A, int m,int n){
//TODO
}
int del_cross_list(PCrossList L, ElemType k){
//TODO
}
//十字链表打印函数
void PrintCrossList(CrossList *M) {
OLNode *p;
int i, j;
for (i = 1; i <= M->cols; ++i) printf("\t[C%d]", i);
putchar('\n');
for (i = 0; i < M->rows; ++i) {
printf("[R%d]", i+1);
p = M->rowhead[i];
for (j = 0; j < M->cols; ++j)
if (p != NULL && p->col-1 == j) {
printf("\t%d", p->value);
p = p->right;
}
else
printf("\t");
putchar('\n');
}
}
int main()
{
CrossList L;
int m = 3, n = 3;//可修改,m:十字链表列数,n:十字链表行数
int del=1;//可修改,要删除的元素的值
int A[9] = {0,1,2,3,1,5,1,7,1};//可修改,注意[]内的值为m*n的值,内为矩阵数据,请勿超界
int flag=1;//可修改,若需进行删除函数的测试,请修改main函数的flag为1,不进行为0
//不可单独进行第二个函数的测试
int co=-1;//请勿修改,用于统计非零元素的个数
int de_num=-1;//请勿修改,用于统计删除元素的个数
printf("||icoding-十字链表||\n@特别注意:icoding本题的比较奇怪,请注意下标值从1还是0开始\n");
printf("---开始测试---");
co=init_cross_list(&L, A, m, n);
printf("\n>>正在初始化\n");
PrintCrossList(&L);
printf("<<初始化完毕,非零元素共计%d个",co);
if(flag==1){
printf("\n>>正在删除元素:%d\n",del);
de_num=del_cross_list(&L, del);
PrintCrossList(&L);
printf("<<删除完毕,共删除元素%d个\n",de_num);
}
else{
printf("根据您的设置,未进行删除函数的测试,若需要请修改main函数的flag为1");
printf("\n---测试完毕---\n");
}
return 0;
}