生成拉丁方阵的完整C代码

/* 拉丁方阵的生成程序 */

#include<stdio.h>
#include<stdlib.h>

typedef int Elemtype;
typedef struct node {
	Elemtype data;
	struct node *next;
}Node, *pLink;

pLink CreatLink( int n )
{
	pLink l = (pLink)malloc(sizeof(Node));
	l -> data = 1;
	l -> next = NULL;

	pLink p, q;
	p = q = l;
	for( int i=0; i<n-1; i++ ) {
		p = (pLink)malloc(sizeof(Node));
		p -> data = i+2;
		q -> next = p;
		q = p;
		q -> next = l;
	}
	return l;
}

void ShowLatin( pLink l, int n )
{
	pLink p;
	for( int i=0; i<n; i++ ){
		p = l;							//每次打印前定位到表头,便于找输出与循环变量的规律
		for( int j=0; j<n+i; j++) { 
			if( j >= i )
				printf("%d ", p->data);
			p = p -> next;
		}
		printf("\n");
	}
}

void DeleteLink( pLink l )
{
	pLink p, q;
	p = q = l;

	while( p->next != p ) {
		q = p -> next;
		p -> next = q -> next;
		free( q );
		q = p -> next;
	}
	free(p);
}

void main()
{
	int n;
	printf("请输入要建立的拉丁方阵的维数:");
	scanf("%d", &n);
	pLink l = CreatLink(n);
	ShowLatin( l, n);
	DeleteLink( l );
}

    原文作者:拉丁方阵问题
    原文地址: https://blog.csdn.net/u014488381/article/details/41280219
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞