| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:链表问题求助!!!
只看楼主 加入收藏
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
结帖率:86.11%
收藏
已结贴  问题点数:10 回复次数:7 
链表问题求助!!!
斑竹求助啊!!!编译通过了但是有个逻辑错误,这个链表一输入进去就出错,我不会跟代码,请斑竹们,高手们帮帮我看看………………
可以的话说怎么跟代码………………

-----------main.cpp文件------------------
#include <stdio.h>
#include <string.h>
#include "tou.h"

void lianbiaobl(lianbiao *head)              //遍历链表
{
    lianbiao *h;
    h=head;
    DATA data;
    printf("ShuJu RuXia!\n");
    while(h)
    {
        data=h->data;
        printf("(%s,%s,%d)\n",data.key,data.name,data.age);
        h=h->next;
    }
}

int main()
{
    lianbiao *node,*head=NULL;
    DATA data;
    char key[15],findkey[15];

    printf("Qing ShuRu : KEY  NAME  AGE\n");

    while(1)         //添加结点
    {
        scanf("%s",data.key);
        if(strcmp(data.key,"0")==0) break;

        scanf("%s%d",data.name,data.age);
        head=lianbiaotjw(head,data);
    }

    printf("Gai LianBiao De JieDian Shu : %d\n",lianbiaojds(head));

    lianbiaobl(head);   //遍历输出

    printf("\nChaRu JieDian : ");
    scanf("%s",&findkey);
    printf("ShuRu JieDian ShuJu!!!\n");
    scanf("%s%s%d",data.key,data.name,data.age);

    head=lianbiaocr(head,findkey,data);  //插入到指定位置

    lianbiaobl(head);  //遍历输出

    printf("\nZai LianBiao Zhong ChaZhao : ");
    scanf("%s",key);
    node=lianbiaogjcz(head,key);  //关键字查找

    if(node)
    {
        data=node->data;
        printf("GuanJianZi %s DueiYing De ShuJuWei (%s,%s,%d)\n",key,data.key,data.name,data.age);  //输出关键字查找到的元素
    }
    else
    {
        printf("Zai LianBiao Zhong WeiZhaoDao!");
    }

    printf("\nZai LianBiaoZhong ShanChu JieDian!");
    scanf("%s",key);
    lianbiaosc(head,key);  //删除关键字的元素

    lianbiaobl(head);    //遍历输出

    return 0;
}

-----------------tou.h文件------------------------------
#include <stdio.h>

typedef struct
{
    char key[15];
    char name[20];
    int age;
}DATA;

typedef struct Node
{
    DATA data;
    struct Node *next;
}lianbiao;

lianbiao *lianbiaotjw(lianbiao *head,DATA data);    //在尾部添加

lianbiao *lianbiaotjt(lianbiao *head,DATA data);     // 在头部添加

lianbiao *lianbiaogjcz(lianbiao *head,char *key);  //关键字查找

lianbiao *lianbiaocr(lianbiao *head,char *findkey,DATA data);   //在指定位置插入

int lianbiaosc(lianbiao *head,char *key);   //删除操作

int lianbiaojds(lianbiao *head);   //求链表结点数

---------------------------------hanshuti.cpp文件---------------------------------------
#include <iostream>
#include "tou.h"
#include <string.h>
using namespace std;

lianbiao *lianbiaotjw(lianbiao *head,DATA data)           //在尾部添加
{
    lianbiao *node,*h;
    if(!(node=(lianbiao *)malloc(sizeof(lianbiao))))
    {
        printf("ShenQing ShiBai !!!");
        return NULL;
    }
    node->data = data;
    node->next = NULL;

    if(head==NULL)
    {
        head=node;
        return head;
    }
    h=head;
    while(h->next!=NULL)
        h=h->next;

    h->next=node;
    return head;
}

lianbiao *lianbiaotjt(lianbiao *head,DATA data)          // 在头部添加
{
    lianbiao *node;
    if(!(node=(lianbiao *)malloc(sizeof(lianbiao))))
    {
        printf("ShenQing ShiBai !!!");
        return NULL;
    }

    node->data=data;
    node->next=head;

    head = node;
    return head;
}

lianbiao *lianbiaocr(lianbiao *head,char *findkey,DATA data)      //在指定位置插入
{
    lianbiao *node,*node1;
    if(!(node=(lianbiao *)malloc(sizeof(lianbiao))))
    {
        printf("ShenQing ShiBai !!!");
        return 0;
    }
    node->data=data;

    node1=lianbiaogjcz(head,findkey);
    if(node1)
    {
        node->next=node1->next;
        node1->next=node;
    }
    else
    {
        printf("JieDian WeiZhaoDao !");
        free(node);
    }

    return head;
}

lianbiao *lianbiaogjcz(lianbiao *head,char *key)      //关键字查找
{
    lianbiao *h;
    h=head;
    while(h)
    {
        if(strcmp(h->data.key,key)==0)
            return h;
        h=h->next;
    }

    return NULL;
}

int lianbiaosc(lianbiao *head,char *key)   //删除操作
{
    lianbiao *node,*h;
    node=h=head;
    while(h)
    {
        if(strcmp(h->data.key,key)==0)
        {
            node->next=h->next;
            free(h);
            return 1;
        }
        else
        {
            node=h;
            h=h->next;
        }
    }
    return 0;
}

int lianbiaojds(lianbiao *head)    //求链表结点数
{
    lianbiao *h;
    h=head;
    int i=0;
    while(h)
    {
        i++;
        h=h->next;
    }

    return i;
}

[ 本帖最后由 a632034079 于 2010-8-13 09:02 编辑 ]
搜索更多相关主题的帖子: 斑竹 void include 
2010-08-12 11:22
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:5 
  printf("Qing ShuRu : KEY  NAME  AGE\n");

    while(1)
    {
        scanf("%s",data.key);
        if(strcmp(data.key,"0")==0) break;

        scanf("%s%d",data.name,data.age);   //&data.age
        head=lianbiaotjw(head,data);
    }


举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-12 11:54
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
收藏
得分:0 
以下是引用东海一鱼在2010-8-12 11:54:45的发言:

  printf("Qing ShuRu : KEY  NAME  AGE\n");

    while(1)
    {
        scanf("%s",data.key);
        if(strcmp(data.key,"0")==0) break;

        scanf("%s%d",data.name,data.age);   //&data.age
        head=lianbiaotjw(head,data);
    }

e错的怎么水
2010-08-12 12:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这种错误,有的编译器会给警告的。
2010-08-12 16:22
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
收藏
得分:0 
以下是引用pangding在2010-8-12 16:22:39的发言:

这种错误,有的编译器会给警告的。

我改了 还是不行………………
2010-08-12 19:56
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你给每个函数头写点注释吧,要不然看名都不知道是什么东西。
比如 lianbiaobl 的 bl 是什么缩写?根据功能猜,好像是“遍历”?总之函数名起的糟一些,就用注释补一下。
还有你有没有怀疑哪个函数错误的可能性更大什么的?总之这种长代码,你自己多给点信息,我们发现问题花的精力就有更少一些,回答的一般也会更有针对性。
2010-08-12 23:49
a632034079
Rank: 2
等 级:论坛游民
帖 子:115
专家分:34
注 册:2009-10-3
收藏
得分:0 
以下是引用pangding在2010-8-12 23:49:22的发言:

你给每个函数头写点注释吧,要不然看名都不知道是什么东西。
比如 lianbiaobl 的 bl 是什么缩写?根据功能猜,好像是“遍历”?总之函数名起的糟一些,就用注释补一下。
还有你有没有怀疑哪个函数错误的可能性更大什么的?总之这种长代码,你自己多给点信息,我们发现问题花的精力就有更少一些,回答的一般也会更有针对性。

,太懒了,都忘了注释,你看下可以不…………
2010-08-13 09:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
不知道你的 key 是什么意思。你只在 main 函数里用了一下吧?实际插入的时候,都没有要求提供 key 呀?好像程序也不能自己算出来。

运行时不正常的表现是什么?死循环还是会非正常退出?在执行到什么地方出的问题?你自己先分析分析。
2010-08-13 13:47
快速回复:链表问题求助!!!
数据加载中...
 
   



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

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