| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:求助!!在链表中删除结点!!
只看楼主 加入收藏
雨汪
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-8-2
结帖率:100%
收藏
已结贴  问题点数:14 回复次数:5 
求助!!在链表中删除结点!!
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct stu)
struct stu
{
    int num;
    double score;
    struct stu *next;
};
struct stu *del(struct stu *head,int num)
{
    struct stu *p0;/*指向要删除的结点*/
    struct stu *p1;/*p1的next域指向p0*/
    p0=head;
    if(head==NULL)
        printf("The list is null\n");
    else
    {
        while(p0!=NULL&&p0->num!=num)
        {
            p1=p0;
            p0=p0->next;/*p0向后移位*/
        }
        if(p0->num==num) /*找到了删除的结点*/
        {
            if(head==p0) /*要删除的结点为第一个结点*/
                head=p0->next;
            else
            {
                p1->next=p0->next;/*p1的next域指向p0的next域*/
                free(p0);/*释放p0的内存空间*/
            }
        }
        else
            printf("%d not been found!\n",num);/*没找到要删除的结点*/
    }
    return head;
}
struct stu *list(struct stu *head,struct stu *news)
{
    struct stu *p0;/*指向要插入的结点*/
    struct stu *p1;/*指向第一个学号比p0指向的结点学号大的结点*/
    struct stu *p2;/*p2的next域指向p1*/
    p1=head;
    p0=news;
    if(head==NULL)/*链表为空*/
    {
        head=p0;
        p0->next=NULL;
    }
    else
    {
        while((p1!=NULL)&&(p0->num>=p1->num))/*寻找第一个学号比插入结点学号大的结点*/
        {
            p2=p1;
            p1=p1->next;
        }
        if(p1==NULL) /*没找到比插入结点学号大的结点*/
        {
            p1->next=p0;
            p0->next=NULL;
        }
        else
        {
            if(head==p1) head=p0;/*找到的结点为链表的第一个结点*/
            else
            {
                p2->next=p0;
                p0->next=p1;
            }
        }
    }
    return head;
}
void output(struct stu *head)
{
    struct stu *p;
    p=head;
    if(head==NULL)
        printf("The list is a null\n");
    else
    {
        while(p!=NULL)
        {
            printf("%d %5.1f\n",p->num,p->score);
            p=p->next;
        }
    }
}

int main()
{
    struct stu *head;
    struct stu *news;
    int num;
    head=NULL;
    scanf("%d",&num);
    while(num!=0)/*输入链表中的数据,输入为零结束*/
    {
        news=(struct stu *)malloc(LEN);/*为指针分配内存空间*/
        news->num=num;
        scanf("%f",&news->score);
        head=list(head,news);
        scanf("%d",&num);
    }
    output(head);
    printf("input the number for deletion:");
    scanf("%d",&num);
    printf("delete:%d\n",num);
    head=del(head,num);
    output(head);
    return 0;
}
没有错误,没有警告,但是运行时一直出错!!代码有点长,辛苦各位了!劳驾各位高手给个正解,谢谢哈!!

[ 本帖最后由 雨汪 于 2013-8-4 12:11 编辑 ]
搜索更多相关主题的帖子: include double null 
2013-08-04 12:10
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
debug

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-04 14:28
雨汪
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-8-2
收藏
得分:0 
回复 2楼 peach5460
拜托,我调试了好吧!!只是一直通不过,我研究了一个上午了愣是没找着问题出在哪了,所以才放在这上面想让大家帮忙看看,你不想帮忙就算了,用得着这么说吗??
2013-08-04 14:57
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:14 
list函数改成如下:
程序代码:
struct stu *list(struct stu *head,struct stu *news)
{
    struct stu *p0;
    struct stu *p1;
    p1=head; p0=news;
    if(p1==NULL || p0->num<p1->num)
    {
        p0->next=p1;
        head=p0;
        return head;
    }
    while((p1->next!=NULL)&&(p0->num>=p1->next->num)) p1=p1->next;
    p0->next=p1->next;
    p1->next=p0;
    return head;
}


另,main中scanf("%f",&news->score);改为scanf("%lf",&news->score);
output中printf("%d %5.1f\n",p->num,p->score);改为printf("%d %5.1lf\n",p->num,p->score);

[ 本帖最后由 ppfly 于 2013-8-4 15:39 编辑 ]

********多贴代码,少说空话*******
2013-08-04 15:34
雨汪
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-8-2
收藏
得分:0 
回复 4楼 ppfly
哈哈,果然可以!!看来问题出在了这段代码上了啊!真心感谢哈!!有了你的提示,我想应该可以把原来错误的地方找出来了!!
2013-08-04 16:47
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用雨汪在2013-8-4 14:57:32的发言:

拜托,我调试了好吧!!只是一直通不过,我研究了一个上午了愣是没找着问题出在哪了,所以才放在这上面想让大家帮忙看看,你不想帮忙就算了,用得着这么说吗??

我一直不知道是什么在咬吕洞宾,原来是你

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-04 18:34
快速回复:求助!!在链表中删除结点!!
数据加载中...
 
   



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

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