链表问题求助!!!
斑竹求助啊!!!编译通过了但是有个逻辑错误,这个链表一输入进去就出错,我不会跟代码,请斑竹们,高手们帮帮我看看………………可以的话说怎么跟代码………………
-----------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 编辑 ]