拉丁方阵显示 N*N 用链表怎么实现
#include <stdio.h>#include <stdlib.h>
#define CardNumber 9
typedef struct node
{
int data;
struct node *next;
}sqlist, *linklist;
linklist CreateLinkList()
{
linklist head = NULL;
linklist s, r;
int i;
r = head;
for(i=1; i <=CardNumber; i++)
{
s = (linklist)malloc(sizeof(sqlist));
s->data = 0;
if(head == NULL)
head = s;
else
r->next = s;
r = s;
}
r->next = head;
return head;
}
// 链表拉丁排序
void Magician(linklist head)
{
linklist p;
int i;
int j;
int Countnumber = 9;
p = head;
p->data = 1; //第一个数是1
for(i=1;i<Countnumber;i++)
{
for(j=i; j <= Countnumber+i; j++)
{
p = p->next;
/* if(p->data != 0) //该位置有数,则下一个位置
{
p->next;
j--;
}*/
p->data=(j-1)%Countnumber+1;
// printf("%3d",(j-1)%Countnumber+1);
}
printf("\n");
/* if(p->data == 0)
{
p->data = (j-1)%Countnumber+1;
Countnumber ++;
if(Countnumber == 14)
break;
}*/
}
}
int main()
{
linklist p;
int i;
int j;
p = CreateLinkList();
Magician(p);
printf("按如下顺序排列:\n");
for (i=1; i < CardNumber; i++)
{
for(j=i;j<=CardNumber+i;j++)
{
printf("%3d", p->data);
p = p->next;
}
printf("\n");
}
return 0;
}
怎么多一列了?
你的写的怎么那么复杂,用循环单链表,每行遍历输出不就行了吗 扭曲的小时代 发表于 2013-5-7 18:53 static/image/common/back.gif
你的写的怎么那么复杂,用循环单链表,每行遍历输出不就行了吗
怎么遍历呀? 强烈支持楼主ing…… 乄ヤ灬风 发表于 2013-5-7 19:10 static/image/common/back.gif
怎么遍历呀?
第一行是1--n,第二行就是2--n--1,第三行3--2,以此类推,也就是设一个循环单链表,下一行就是上一行向前推进一个数,由于是循环链表,推进的数就排到表尾部去了,直到n行为止,具体代码,改天给你 沒看明白,繼續學習。。
页:
[1]