| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1043 人关注过本帖
标题:第一个结点怎么删除?
只看楼主 加入收藏
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
结帖率:97.44%
收藏
已结贴  问题点数:50 回复次数:7 
第一个结点怎么删除?
ST *del(ST *trans_head2,int stu_num2)//函数功能:删除stu_num2所在的结点(目前第一个结点删除不了)           trans_head2是传来的头指针
{
    ST *p1,*p2,*p3;
    p3=trans_head2;
    p2=trans_head2;
    p1=trans_head2;
    if(trans_head2==NULL)
    {
        printf("无数据!");
    }
    else
    {
        while((p1->stu_num!=stu_num2)&&p1->next!=NULL)
        {
            p2=p1;
            p1=p1->next;
        }
        if(p1->stu_num==stu_num2)
        {
                p2->next=p1->next;
        }
    }
    free(p1);
    while(p3)//这步只是用来检测删除的效果
    {
        printf("%d %d %d %d\n",p3->stu_num,p3->grade_math,p3->grade_english,p3->grade_physics);
        p3=p3->next;
    }
    return trans_head2;
}


搜索更多相关主题的帖子: next 
2011-04-24 13:45
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:40 
ST ** trans_head2

不过最好是搞个头结点
2011-04-24 14:52
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
回复 2楼 voidx
ST *trans_head2            这就是传来的头结点啊!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-04-24 14:58
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 3楼 liangjinchao
头结点是不保存数据的,只是用来表示列表的开始,第一个含有数据的元素是头结点的 next,这样要删第一个元素不是简单的多?

不然你就得用指向指针的指针
2011-04-24 15:26
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:10 
1,表头不保存数据,它只是指向链表的第一个元素。
2,表头是不能删除的吧!改变表头的指向是可以的。同样, 表尾也不能删除, 否则就不是一个完整的链表啦。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-24 16:08
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
回复 4楼 voidx
程序代码:
ST *creat(int n)
{
    int i;
    ST *head,*p,*p2;
    head=NULL;
    p=(ST*)malloc(sizeof(ST));
    printf("请输入学号,数学成绩,英语成绩,物理成绩: \n");
    scanf("%d%d%d%d",&p->stu_num,&p->grade_math,&p->grade_english,&p->grade_physics);
    p2=p;
    head=p2;
    for(i=0;i<n-1;i++)
    {
        p=(ST*)malloc(sizeof(ST));
        printf("请输入学号,数学成绩,英语成绩,物理成绩: \n");
        scanf("%d%d%d%d",&p->stu_num,&p->grade_math,&p->grade_english,&p->grade_physics);
        p2->next=p;
        p2=p2->next;
    }
    p2->next=NULL;

    return head;
}



这是创建链表的函数, 我一直都以为  head 就是头指针,但是按照您的说法,似乎是错的!麻烦帮忙改改!!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-04-24 22:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 6楼 liangjinchao
程序代码:
// 修改以后如下:
ST * creat(int n)    // 单词拼错了,应该是 create
{
    ST * head = (ST *) malloc(sizeof(ST)), * p = head;
    while (n--)
    {
        p->next = (ST *) malloc(sizeof(ST));
        p = p->next;
        printf("请输入学号,数学成绩,英语成绩,物理成绩: \n");
        scanf("%d %d %d %d", &p->stu_num, &p->grade_math, &p->grade_english, &p->grade_physics);
    }
    p->next=NULL;
    return head;
}


[ 本帖最后由 voidx 于 2011-4-24 23:17 编辑 ]
2011-04-24 23:14
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
删除第一个节点把head指针指向下一个就行了

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-04-25 00:06
快速回复:第一个结点怎么删除?
数据加载中...
 
   



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

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