| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 576 人关注过本帖
标题:麻烦帮忙修改一下带头结点的单链表电话本
只看楼主 加入收藏
szlsyon
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-28
收藏
 问题点数:0 回复次数:2 
麻烦帮忙修改一下带头结点的单链表电话本
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

#define maxsize 100

typedef int datatype;

typedef struct {
char name[20];
long int number;
}telephone_list;

typedef struct link_node{
telephone_list info;
struct link_node *next;
}node;

node *init()//创建带头链表
{
    node *head;
    head=(node*)malloc(sizeof(node));
    head->next=NULL;
    return head;
}

void display(node *head)//依次打印各个节点内容
{
node *p;
p=head->next;
if(!p) printf("\n电话本是空的!") ;
else
{
    printf("\n电话本的列表:\n");
    while(p)
    {
        printf("name:%s\t",p->info.name);
        printf("telephone:%ld\n",p->info.number);
        p=p->next;
    }
}
}

node *find(node *head,int i)//按节点查找内容
{
    int j=0;
node *p=head;
if (i<0)
{printf("\n节点不存在");return NULL;}
else if(i==0) return p;
while(p&&i!=j)
{p=p->next;j++;}
{printf("name:%s\t",(p->info).name);
printf("telephone:%ld\n",(p->info).number);}
return p;
}


void name_find(node *head,char name[20])//按名字进行查找
{
int t;
node *p=head;
while(t!=0)
t=strcmp(name,p->info.name);
if (t==0)
{printf("name:%s\t",(p->info).name);
printf("telephone:%ld\n",(p->info).number);}
else p=p->next;
}


void number_find(node *head,long int x)//按内容进行查找
{
node *p=head;
while(x!=p->info.number)
{p=p->next;}
{printf("name:%s\t",(p->info).name);
printf("telephone:%ld\n",(p->info).number);}
}

node *insert(node *head,telephone_list x,int i)//按节点插入值
{
node *p,*q;
q=find(head,i);
if(!q)
{
    printf("插入点不存在");return NULL;
}
    p=(node*)malloc(sizeof(node));
    p->info=x;
    p->next=q->next;
    q->next=p;
    return head;
}

node *insert1(node *head,telephone_list x,char name[20])//在指定节点值后插入一个新节点
{
    int t;
    node *p=head,*q=head;
    while(t!=0)
    {
        t=strcmp(name,p->info.name);
        if (t==0)
    {
        p=(node*)malloc(sizeof(node));
        p->info=x;
        p->next=q->next;
        q->next=p;
        strcpy(p->info.name,x.name);
        p->info.number=x.number;
    }
        else p=p->next;
    }
return head;
}

node *change(node *head,telephone_list x,char name[20])//指定值节点的数值修改
{
    int t;
    node *p=head;
    while(t!=0)
    {
        t=strcmp(name,p->info.name);
        if (t==0)
    {
        p->info=x;
        strcpy(p->info.name,x.name);
        p->info.number=x.number;
    }
        else p=p->next;
    }
return head;
}


node *dele(node *head,telephone_list x)//删除制定内容节点
{
    node *pre=head,*q;
    q=head->next;
    while(q&&q->info.name!=x.name)
    {pre=q;q=q->next;}
    pre->next=q->next;
    free(q);
    return head;
}

void main()
{struct link_node head;
init();//建立头结点
telephone_list ljr;//建立一个叫ljr的电话本

int i=1;
while(i<=10)
{
sprintf(ljr.name,"english_name%d",i);
ljr.number = 123456789+i;
insert(&head,ljr,i);
i++;
}

display(&head);

find(&head,3);

char a[20]="english_name5";
name_find(&head,a);

number_find(&head,1234567890);

insert1(&head,ljr,a);

change(&head,ljr,a);

dele(&head,ljr);

}
麻烦各位帮忙看一下,语法方面已经编译通过,经过自己的一步一步检验,程序在一开始运行到用insert插入原始数据的时候就出错,请问逻辑上出了什么问题吗?自己看了很久很久都搞不清楚,谢谢了!!
搜索更多相关主题的帖子: 结点 单链 麻烦 电话 
2010-06-28 16:34
szlsyon
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-28
收藏
得分:0 
人工置顶,十分感谢,快来帮忙看看,我纠结了很久啊
2010-06-28 16:51
szlsyon
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-28
收藏
得分:0 
求答案
2010-06-28 19:20
快速回复:麻烦帮忙修改一下带头结点的单链表电话本
数据加载中...
 
   



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

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