由于用数组有限制,所以用calloc来动态申请内存。
#if 0
拉丁方阵
需要的函数:
1.链表的生成以及初始化;
2.动态申请方阵数组函数
3.拉丁化赋值;
4.方阵式输出;
思路:建立一个2维数组。通过用户设定的长度来生成循环链表
通过链表,赋值到2维数组。
每次链表节点位置向后移一位。循环赋值到每一维数组。
例如:
3*3的拉丁方阵。链表中存有1,2,3.
那么LatinArray[0][] = 1,2,3
链表头结点后移一位,即2,3,1
那么LatinArray[1][] = 2,3,1
其他同理;
#endif
#include <stdio.h>
#include <stdlib.h>
#define OK 'y'
typedef struct latin
{
int data;
struct latin *next;
}Latin, *Latins;
#if 0
名称:CreateList[初始化链表]
调用:CreateList(Latins head, int num)
作用:生成并初始化设定长度的链表;
参数:head,头结点。num,需要设定方阵的大小
返回值:OK 表示调用成功
#endif
Latins CreateList(Latins head, int num)
{
Latins p, r;
p = head;
p->data = num;
num--;
while(num != 0)
{
r = (Latins)malloc(sizeof(Latin));
if(!r)
{
printf("申请内存出错!");
exit(1