标题:链表排序问题
只看楼主
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
结帖率:100%
已结贴  问题点数:20 回复次数:7 
链表排序问题
这是我自己写的一个将链表元素按从小到大排列的一个函数,但是每次调用的时候都会弹出来一个“已停止工作”的对话框,不知道问题出在哪里,请大家帮个忙,谢了~~~
程序代码:
void array(struct Node *head)
{
    struct Node *p1,*q,*f;
    struct Node *head2,*p2;

    p1 = head;
    p1 = p1->next;
    head2 = p2 = (struct Node *)malloc(sizeof(struct Node));
    head2->next = NULL;

    while(p1 != NULL)
    {
        q = (struct Node *)malloc(sizeof(struct Node));
        q->num = p1->num;

        if(head2 = NULL)
        {
            head2->next = q;
        }

        p2 = head2;
        while(p2->next != NULL && q->num > p2->next->num)
        {
            p2 = p2->next;
        }

        q->next = p2->next;
        p2->next = q;

        f = p1;
        p1 = p1->next;
        free(f);
    }
   
    display(head2);
    release(head2);

    return;
}
display是打印链表元素的函数,这个检验过了没有问题的,release是释放链表元素的函数。
搜索更多相关主题的帖子: 元素 对话框 next 
2012-09-12 22:37
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:0 
display检验没问题,那就是release函数的问题了,发上来看看:)
2012-09-13 11:04
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
得分:0 
回复 2楼 stophin
程序代码:
void release(struct Node *p)
{
    struct Node *q;
    while(p!=NULL)
    {
        q=p;
        p=p->next;
        free(q);
    }
    return;
}

release……
2012-09-13 12:02
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
得分:15 
以下是引用翼碎在2012-9-12 22:37:17的发言:

这是我自己写的一个将链表元素按从小到大排列的一个函数,但是每次调用的时候都会弹出来一个“已停止工作”的对话框,不知道问题出在哪里,请大家帮个忙,谢了~~~void array(struct Node *head)
{
    struct Node *p1,*q,*f;
    struct Node *head2,*p2;
 
    p1 = head;
    p1 = p1->next;
    head2 = p2 = (struct Node *)malloc(sizeof(struct Node));
    head2->next = NULL;
 
    while(p1 != NULL)
    {
        q = (struct Node *)malloc(sizeof(struct Node));
        q->num = p1->num;
 
        if(head2 = NULL) //////////////////////////////////////////不知道这一句有没有问题
        {
            head2->next = q;
        }
 
        p2 = head2;
        while(p2->next != NULL && q->num > p2->next->num)
        {
            p2 = p2->next;
        }
 
        q->next = p2->next;
        p2->next = q;
 
        f = p1;
        p1 = p1->next;
        free(f);
    }
   
    display(head2);
    release(head2);
 
    return;
}display是打印链表元素的函数,这个检验过了没有问题的,release是释放链表元素的函数。
学习学习!!!菜鸟而已

喜欢睡觉 却经常熬夜
2012-09-13 12:30
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:2 
回复 4楼 阿鞠尼
终于有人看出来了

总有那身价贱的人给作业贴回复完整的代码
2012-09-13 12:56
Andony
Rank: 2
等 级:论坛游民
帖 子:38
专家分:60
注 册:2012-9-12
得分:3 
以下是引用翼碎在2012-9-12 22:37:17的发言:

这是我自己写的一个将链表元素按从小到大排列的一个函数,但是每次调用的时候都会弹出来一个“已停止工作”的对话框,不知道问题出在哪里,请大家帮个忙,谢了~~~void array(struct Node *head)
{
    struct Node *p1,*q,*f;
    struct Node *head2,*p2;

    p1 = head;
    p1 = p1->next;
    head2 = p2 = (struct Node *)malloc(sizeof(struct Node));
    head2->next = NULL;

    while(p1 != NULL)
    {
        q = (struct Node *)malloc(sizeof(struct Node));
        q->num = p1->num;

        if(head2 = NULL)//通常写比较条件的时候写成 NULL == head2 的形式,因为对常量赋值是不被允许的,即使少写个等号编译的时候会报错的
        {
            head2->next = q;
        }

        p2 = head2;
        while(p2->next != NULL && q->num > p2->next->num)
        {
            p2 = p2->next;
        }

        q->next = p2->next;
        p2->next = q;

        f = p1;
        p1 = p1->next;
        free(f);
    }
   
    display(head2);
    release(head2);

    return;
}display是打印链表元素的函数,这个检验过了没有问题的,release是释放链表元素的函数。

以下是引用翼碎在2012-9-12 22:37:17的发言:

这是我自己写的一个将链表元素按从小到大排列的一个函数,但是每次调用的时候都会弹出来一个“已停止工作”的对话框,不知道问题出在哪里,请大家帮个忙,谢了~~~void array(struct Node *head)
{
    struct Node *p1,*q,*f;
    struct Node *head2,*p2;

    p1 = head;
    p1 = p1->next;
    head2 = p2 = (struct Node *)malloc(sizeof(struct Node));
    head2->next = NULL;

    while(p1 != NULL)
    {
        q = (struct Node *)malloc(sizeof(struct Node));
        q->num = p1->num;

        if(head2 = NULL)//通常写比较条件的时候写成 NULL == head2 的形式,因为对常量赋值是不被允许的,即使少写个等号编译的时候会报错的
        {
            head2->next = q;
        }

        p2 = head2;
        while(p2->next != NULL && q->num > p2->next->num)
        {
            p2 = p2->next;
        }

        q->next = p2->next;
        p2->next = q;

        f = p1;
        p1 = p1->next;
        free(f);
    }
   
    display(head2);
    release(head2);

    return;
}display是打印链表元素的函数,这个检验过了没有问题的,release是释放链表元素的函数。

以下是引用翼碎在2012-9-12 22:37:17的发言:

这是我自己写的一个将链表元素按从小到大排列的一个函数,但是每次调用的时候都会弹出来一个“已停止工作”的对话框,不知道问题出在哪里,请大家帮个忙,谢了~~~void array(struct Node *head)
{
    struct Node *p1,*q,*f;
    struct Node *head2,*p2;

    p1 = head;
    p1 = p1->next;
    head2 = p2 = (struct Node *)malloc(sizeof(struct Node));
    head2->next = NULL;

    while(p1 != NULL)
    {
        q = (struct Node *)malloc(sizeof(struct Node));
        q->num = p1->num;

        if(head2 = NULL)//通常写比较条件的时候写成 NULL == head2 的形式,因为对常量赋值是不被允许的,即使少写个等号编译的时候会报错的
        {
            head2->next = q;
        }

        p2 = head2;
        while(p2->next != NULL && q->num > p2->next->num)
        {
            p2 = p2->next;
        }

        q->next = p2->next;
        p2->next = q;

        f = p1;
        p1 = p1->next;
        free(f);
    }
   
    display(head2);
    release(head2);

    return;
}display是打印链表元素的函数,这个检验过了没有问题的,release是释放链表元素的函数。

以下是引用翼碎在2012-9-12 22:37:17的发言:

这是我自己写的一个将链表元素按从小到大排列的一个函数,但是每次调用的时候都会弹出来一个“已停止工作”的对话框,不知道问题出在哪里,请大家帮个忙,谢了~~~void array(struct Node *head)
{
    struct Node *p1,*q,*f;
    struct Node *head2,*p2;

    p1 = head;
    p1 = p1->next;
    head2 = p2 = (struct Node *)malloc(sizeof(struct Node));
    head2->next = NULL;

    while(p1 != NULL)
    {
        q = (struct Node *)malloc(sizeof(struct Node));
        q->num = p1->num;

        if(head2 = NULL)//通常写比较条件的时候写成 NULL == head2 的形式,因为对常量赋值是不被允许的,即使少写个等号编译的时候会报错的
        {
            head2->next = q;
        }

        p2 = head2;
        while(p2->next != NULL && q->num > p2->next->num)
        {
            p2 = p2->next;
        }

        q->next = p2->next;
        p2->next = q;

        f = p1;
        p1 = p1->next;
        free(f);
    }
   
    display(head2);
    release(head2);

    return;
}display是打印链表元素的函数,这个检验过了没有问题的,release是释放链表元素的函数。

重复的事情用心做,你就是赢家
2012-09-13 13:59
Andony
Rank: 2
等 级:论坛游民
帖 子:38
专家分:60
注 册:2012-9-12
得分:0 
怎么一下子回复了这么多条

重复的事情用心做,你就是赢家
2012-09-13 14:00
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
得分:0 
回复 4楼 阿鞠尼
额,是这里,俩等号应该,唉……
2012-09-13 17:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381287-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099920 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved