/* 拉丁方阵的生成程序 */ #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 ); }