| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 496 人关注过本帖
标题:链表问题,求助!!!求高手
只看楼主 加入收藏
yuyuehan2010
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:19
专家分:22
注 册:2011-10-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
链表问题,求助!!!求高手
谁能帮忙看看这链表。。。在删除链表总出问题
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct work)

struct work{
    int num;
    char name[15];
    double gongzi;
    struct work *next;
};

int n;

struct work *create()//创建链表 
{
    struct work *head,*p1,*p2;
    n=0;
    p1 = p2 = (struct work *)malloc(LEN);
    scanf("%d %lf %s ",&p1->num,&p1->gongzi,p1->name);
    head = NULL;
    while(p1->num != 0)
    {
        n++;
        if(n == 1)   head = p1;
        else p2->next = p1;
        p2 = p1;
        p1 = (struct work *)malloc(LEN);
        scanf("%d%lf%s",&p1->num,&p1->gongzi,p1->name);
    }
    p2->next = NULL;
    return head;
}



struct work *del(struct work *head,int num)//删除链表的一行 
{
    struct work  *p1,*p2;
    if(head == NULL)
    {
        printf("此链表无,请确认链表有无创建");
        return head;
    }
    p1 = head;
    if(num != p1->num&&p1->next != NULL)
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(p1->num == num)
    {
        if(head == p1)    head = p1->next;
        else p2->next = p1->next;
        printf("此数%d存在",num);
        free(p1);
        n--;
    }
    else printf("此数%d不存在",num);
    return head;
}

void print(struct work *head)
{
    struct work *p;
    p = head;
    while(p!=NULL)
    {
        printf("%d\t%s\t%.2lf\n",p->num,p->name,p->gongzi);
        p = p->next;
    }
}

void main()
{
    struct work *head;
    char pd;
    int num;
    head = create();
    print(head);
    printf("确认是否删除此表的一行??输入y为修改,否则不修改...请输入\n");
    scanf("%c",&pd);
    if(pd == 'y'||pd == 'Y')
        print(head);
    else
    {
        printf("请把不要行的开头数输入\n");
        scanf("%d",num);
        head = del(head,num);
        print(head);
    }
}
搜索更多相关主题的帖子: color 
2011-12-14 16:48
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:20 
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct work)

struct work{
    int num;
    char name[15];
    double gongzi;
    struct work *next;
};

int n;

struct work *create()//创建链表
{
    struct work *head,*p1,*p2;
    n=0;
    p1 = p2 = (struct work *)malloc(LEN);
    printf("请输入信息:编号,工资,姓名\n");
    scanf("%d %lf %s ",&p1->num,&p1->gongzi,p1->name);
    head = NULL;
    while(p1->num != 0)
    {
        n++;
        if(n == 1)   head = p1;
        else p2->next = p1;
        p2 = p1;
        p1 = (struct work *)malloc(LEN);
        scanf("%d%lf%s",&p1->num,&p1->gongzi,p1->name);
    }
    p2->next = NULL;
    return head;
}



struct work *del(struct work *head,int num)//删除链表的一行
{
    struct work  *p1,*p2;
    if(head == NULL)
    {
        printf("此链表无,请确认链表有无创建");
        return head;
    }
    p1 = head;
    if(num != p1->num&&p1->next != NULL)
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(p1->num == num)
    {
        if(head == p1)    head = p1->next;
        else p2->next = p1->next;
        printf("此数%d存在\n",num);
        free(p1);
        n--;
    }
    else printf("此数%d不存在\n",num);
    return head;
}

void print(struct work *head)
{
    struct work *p;
    p = head;
    while(p!=NULL)
    {
        printf("%d\t%s\t%.2lf\n",p->num,p->name,p->gongzi);
        p = p->next;
    }
}

int main()
{
    struct work *head;
    char pd;
    int num = -1; //here
    head = create();
    print(head);
    printf("确认是否删除此表的一行??输入y为修改,否则不修改...请输入\n");
    scanf("%c",&pd);
    getchar(); //here
    if(pd == 'y'|| pd == 'Y')
        print(head);
    else
    {
        printf("请把不要行的开头数输入\n");
        scanf("%d", &num); //here
        head = del(head,num);
        print(head);
    }
    return 0;
}
收到的鲜花

我们都在路上。。。。。
2011-12-15 11:42
yuyuehan2010
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:19
专家分:22
注 册:2011-10-6
收藏
得分:0 
回复 2楼 hellovfp
可以讲下为什么这么修改吗???我运行了,虽然可以,但我不太了解,能讲下吗??
2011-12-15 12:49
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
变量最好初始化。int num = -1; //here
清上一个输入缓冲区。getchar(); //here
num缺少地址引用符。scanf("%d", &num); //here
继续努力。

我们都在路上。。。。。
2011-12-15 12:54
yuyuehan2010
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:19
专家分:22
注 册:2011-10-6
收藏
得分:0 
回复 4楼 hellovfp
问下不清缓冲区的话,是不是scanf("%c",&pd);无法运行??
初学者弱弱问句缓冲区什么概念??要是介绍不清的话或打字有点多的话,能告诉下怎么查到这个解释。。
2011-12-15 13:01
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
输入pd值后,按回车,pd得到了数值,但回车还在缓冲区中,如果不清的话,回车将作为下一个scanf的输入。
新标准推荐用fgetX相关函数,而不用scanf。
关于缓冲区的概念,Tong大侠好象讲过,你查一下相关的帖子吧。

我们都在路上。。。。。
2011-12-15 13:24
我是少飞侯
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-12-3
收藏
得分:0 
觉得这个程序的话是不是还是有问题的呀。。。。
    if(num != p1->num&&p1->next != NULL)
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(p1->num == num)
    {
        if(head == p1)    head = p1->next;
        else p2->next = p1->next;
        printf("此数%d存在\n",num);
        free(p1);
        n--;
    }
觉得这一段代码不能找到想要删除的那一行的吧?
求解释。。。。
2011-12-15 14:14
yuyuehan2010
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:19
专家分:22
注 册:2011-10-6
收藏
得分:0 
回复 7楼 我是少飞侯
这是我失误,应该是while不是if
2011-12-15 18:44
快速回复:链表问题,求助!!!求高手
数据加载中...
 
   



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

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