魔术师发牌的问题
刚学数据结构与算法,在魔术师发牌问题遇到一个问题,编译没有错,但是运行程序时报错,请各位帮我看一下问题所在,不胜感激, #include <stdlib.h>#include <stdio.h>
#define CardNumber 13
typedef struct Node{
int data;
struct Node *next; // 这里少了分号;
} sqlList,*LinkList;
LinkList CreateList(){
int i;
LinkList head=NULL;
LinkList p,q;
p=head;
for(i=1;i<=CardNumber;i++)
{
q=(LinkList)malloc(sizeof(sqlList));
q->data=0;
/*
head=q;
p->next=q;
这是要头插还是尾插?前一步头结点指向新结点,又让尾结点指向新结点
*/
if ( !head ) // 头结点空就放头结点后面
head = q;
else // 不空就放尾结点后面
p->next = q;
p=q;
}
p->next=head;
return head;
}
void Mangic(LinkList *head)
{
int Number=2;
int i;
LinkList p;
p= *head; // head是二次指针,p是一次,解引用后再赋值
p->data=1;
while(1)
{
for(i=0;i<Number;i++)
{
p=p->next;
if(p->data!=0)
{
//p->next;
i--;
}
}
if(p->data==0)
{
p->data=Number;
Number++;
if(Number==14)
{
break;
}
}
}
}
int main(){
int i;
LinkList l;
l=CreateList();
Mangic(&l);
for(i=0;i<CardNumber;i++)
{
printf("%d ", l->data);
l=l->next;
}
return0;
}
有问题点“回复”,没问题麻烦点一下“最佳答案” 丶忘却的年少o 发表于 2017-10-18 11:46
有问题点“回复”,没问题麻烦点一下“最佳答案”
非常感谢 丶忘却的年少o 发表于 2017-10-18 11:46
有问题点“回复”,没问题麻烦点一下“最佳答案”
LinkList head=NULL;
LinkList p,q;
p=head;
for(i=1;i<=CardNumber;i++)
{
q=(LinkList)malloc(sizeof(sqlList));
q->data=0;
/*
head=q;
p->next=q;
这是要头插还是尾插?前一步头结点指向新结点,又让尾结点指向新结点
*/
if ( !head ) // 头结点空就放头结点后面
head = q;
else // 不空就放尾结点后面
p->next = q;
p=q;
}
两个问题:1:这个header初始值位NULL,为什么下面那一步还要判断2:头结点空就放头结点后面,这不是把q作为头结点吗?不空就放尾结点后面,p不是头结点吗? 寻找思考的意义 发表于 2017-10-18 13:15
LinkList head=NULL;
LinkList p,q;
p=head;
好像楼主链表、头插法和尾插法没搞清楚,要好好看看哦,后面基本都用这些的。首先先声明一下,这个链表没有头结点,p是定位链表最后元素位置,q是生成的新元素链表。
问题1:看问题2
问题2:举个例子,小朋友春游,依次在班级牌(head指针)所在位置排队(元素)。每一个要加入队伍的小朋友是不是要看一下牌子后面有没有人(判断链表是否为空),没人直接站牌子后面(head = q),有人就站在队伍的后面。(到这里问题1就已经有答案了。)然后队伍的最后一名变成了新加入的那个小朋友(p = q),要是再来一个小朋友,那队伍最后一直都会是新来的(p = q)。最后所有小朋友都排好队了,让最后一个小朋友去拉第一个小朋友的手,形成一个环(圈),p->next = head 丶忘却的年少o 发表于 2017-10-18 13:36
好像楼主链表、头插法和尾插法没搞清楚,要好好看看哦,后面基本都用这些的。首先先声明一下,这个链表没 ...
这一部分确实没有学好,谢谢大神的解答{:5_109:} 寻找思考的意义 发表于 2017-10-18 14:05
这一部分确实没有学好,谢谢大神的解答
讲真,别往下学,后面差不多都是需要用到线性表的内容,先搞懂线性表。
这个算法是很费脑子的,绕来绕去的,所以前几章基础的要理解 丶忘却的年少o 发表于 2017-10-18 14:10
讲真,别往下学,后面差不多都是需要用到线性表的内容,先搞懂线性表。
这个算法是很费脑子的,绕来绕去 ...
谢谢提醒,我打算重新学前面的,重新敲一下代码,打好基础,在往下学,方便加个联系方式吗,有问题的话还要请教你{:5_109:} 寻找思考的意义 发表于 2017-10-18 15:10
谢谢提醒,我打算重新学前面的,重新敲一下代码,打好基础,在往下学,方便加个联系方式吗,有问题的话还 ...
论坛就可以了,我基本都在,你看我回复解答的频率就知道了。微信、QQ都不怎么用了
页:
[1]