| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 811 人关注过本帖
标题:删除链表,有问题,求指导
取消只看楼主 加入收藏
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
结帖率:90.63%
收藏
已结贴  问题点数:20 回复次数:4 
删除链表,有问题,求指导
哪里错了,要注意什么?什么思想?
程序代码:
/*
学生信息删除函数,删除指定学号的学生信息,
传递给该函数的实参是所建立的单链表的头指针L、要删除的学生学号。
若删除成功,返回值为1,否则,返回值为0。

 */
#include<stdio.h>
#include<stdlib.h>
#define N 5
struct stud
{
    int num;
    char name[10];
    float score[N+1];
    struct stud *next;
};
struct stud *create();
int Delete(struct stud *head, int * per);
void print(struct stud *head);
//主函数
int main(void)
{
    struct stud *L;
    int n, i;
    L=create();
    printf("请输入要删除学生的学号:\n");
    scanf("%d\n", &n);
    i=Delete(L, &n);
    printf("%d\n", i);
    return 0;
}
//创建链表头,这里也有运行错误
struct stud *create()
{
    struct stud *head,*p1,*p2;
    int n=0, i;
    head = NULL;
    p2 = p1 = (struct stud*)malloc(sizeof(struct stud));
    printf("请输入学号:\n");
    scanf("%d",&p1->num );
    printf("请输入姓名:\n");
    scanf("%s", p1->name);
    if( p1->num == 0 )
    {
        p2->next=NULL;
        return head;
    }
    printf("请输入学生5门成绩:\n");
    for(i=0; i<5; i++)
        scanf("%f",&p1->score[i]);
    while(p1->num != 0)
    {
        n=n+1;
        if(n==1)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
        p1 = (struct stud*)malloc(sizeof(struct stud));
        printf("请输入学号:\n");
        scanf("%d",&p1->num);
        if( p1->num == 0 )
        {
            p2->next=NULL;
            return head;
        }
        printf("请输入姓名:\n");
        scanf("%s", p1->name);
        printf("请输入5门成绩:\n");
        for(i=0; i<5; i++)
            scanf("%f",&p1->score[i]);
    }
    p2->next =NULL;
    return head;
}
//问题在这里开始
/*
学生信息删除函数,删除指定学号的学生信息,
传递给该函数的实参是所建立的单链表的头指针L、要删除的学生学号。
若删除成功,返回值为1,否则,返回值为0。

 */
int Delete(struct stud *head, int * per)
{
    int y;
    struct stud * p = head;
    struct stud * pa;
    if (head->next == NULL)
    {
        printf("链表为空!!!");
        y=0;
    }
    else
    {
        while(*per != 0 && p->next!=NULL)
        {
            pa=p;
            p=p->next;
        }
        if(*per==0)
        {
            pa->next=p->next;
            y=1;
            free(p);//释放内存
        }
        else
        {
            printf("未找到该数据!\n");
            y=0;
        }
    }
    return y;
}
搜索更多相关主题的帖子: 信息 
2013-01-04 09:44
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
收藏
得分:0 
回复 5楼 crystall
你的代码有错误

新手发言,请多指教!
2013-01-04 21:35
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
收藏
得分:0 
回复 8楼 mutouren123
我不太懂,学到链表就好难理解了

新手发言,请多指教!
2013-01-05 13:29
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
收藏
得分:0 
回复 13楼 crystall
当删除头链表时再输出声下的链表会出现乱码

新手发言,请多指教!
2013-01-05 15:26
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
收藏
得分:0 
回复 16楼 wengege
我才刚学到链表,还没详细学

新手发言,请多指教!
2013-01-06 15:54
快速回复:删除链表,有问题,求指导
数据加载中...
 
   



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

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