鱼C论坛

 找回密码
 立即注册
查看: 4723|回复: 5

拉丁方阵显示 N*N 用链表怎么实现

[复制链接]
发表于 2013-5-1 21:41:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
怎么多一列了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-7 18:53:45 | 显示全部楼层
你的写的怎么那么复杂,用循环单链表,每行遍历输出不就行了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-7 19:10:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-8 02:32:27 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-8 13:26:55 | 显示全部楼层
乄ヤ灬风 发表于 2013-5-7 19:10
怎么遍历呀?

第一行是1--n,第二行就是2--n--1,第三行3--2,以此类推,也就是设一个循环单链表,下一行就是上一行向前推进一个数,由于是循环链表,推进的数就排到表尾部去了,直到n行为止,具体代码,改天给你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-8 13:37:36 | 显示全部楼层
沒看明白,繼續學習。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 00:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表