#include "stdio.h"
#include "stdbool.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
#include "stdarg.h"
#include "time.h"
typedef int Elemtype;
typedef int Status;
typedef struct node
{
Elemtype data;
struct node* next;
} Node;
typedef struct node* LinkList;
void CreatLatin(LinkList *CL,int num);
void DeleteList(LinkList *CL);
int main(void)
{
LinkList List;
int i,n;
printf("1.创建拉丁方阵\n2.释放当前方阵内存\n 输入0退出 \n");
while(i != 0)
{
scanf("%d",&i);
switch(i)
{
case 1:
printf("要创建n*n的方阵?\n请输入n = ");
scanf("%d",&n);
putchar('\n');
CreatLatin(&List,n);
break;
case 2:
DeleteList(&List);
break;
}
}
return 0;
}
void CreatLatin(LinkList *CL,int n)
{
LinkList temp,rear,p;
*CL = (LinkList)malloc(sizeof(Node));
(*CL)->next = *CL;
rear = *CL;
for(int i = 0 ; i < n ; i++)
{
temp = (LinkList)malloc(sizeof(Node));
temp->data = i+1;
temp->next = rear->next;
rear->next = temp;
rear = temp;
}
rear->next = (*CL)->next;
p = (*CL)->next;
for(int j = 0;j < n;j++)
{
for(int k = 0;k < n;k++)
{
printf("%d ",p->data);
p = p->next;
}
putchar('\n');
p = p->next;
}
putchar('\n');
}
void DeleteList(LinkList *CL)
{
LinkList temp,temp1;
int count = 2;
temp = (*CL)->next;
temp1 = *CL;
while(temp->next != (*CL)->next)
{
temp = temp->next;
count++;
}
LinkList buff[count];
for(int i = 0;i < count;i++)
{
buff[i] = temp1;
temp1 = temp1->next;
}
for(int i = 0; i < count;i++)
{
free(buff[i]);
}
*CL = 0;
printf("释放了%d个结点\n",count);
}
拉丁方阵问题练习
最新推荐文章于 2019-10-06 18:59:39 发布