c语言 通讯录 链式存储,通讯录1 + C语言练习题(201812.13)

#include #define MAL_OK 1

#define MAL_ERR 0

struct node

{

char name[20];

int num;

struct node * next;

};

typedef struct node Node;

typedef struct node * Link;

void wellcome()

{

printf("------------------------------------\n");

printf(" wellcome to the address list. \n");

printf(" input 1: Add people. \n");

printf(" input 2: Show the address list.\n");

printf(" input 3: Alter the address.\n");

printf(" input 4: inquire someone.\n");

printf(" input 5: Delete someone.\n");

printf(" input 6: Exit.\n");

printf("\n");

printf("\n");

printf("------------------------------------\n");

}

int malloc_ok(Link new_node)

{

if(new_node == NULL)

{

return MAL_ERR;

}

else

{

return MAL_OK;

}

}

void create_node(Link *new_node)

{

(*new_node) = (Link)malloc(sizeof(Node));

while(malloc_ok(*new_node) == MAL_ERR)

{

(*new_node) = (Link)malloc(sizeof(Node));

}

}

void create_link(Link * head)

{

create_node(head);

(*head)->next = NULL;

}

void inser_node_tail(Link head,Link new_node)

{

Link p;

p = head;

while(p->next != NULL)

{

p = p->next;

}

p->next = new_node;

new_node->next = NULL;

}

void input_people(Link new_node)

{

Link p;

p = new_node;

printf("input name.\n");

getchar();

gets(p->name);

printf("input phone number.\n");

scanf("%d",&p->num);

}

void create_address(Link * head,Link * new_node)

{

if((*head) == NULL)

{

create_link(head);

}

create_node(new_node);

inser_node_tail(*head,*new_node);

input_people(*new_node);

}

void display(Link head)

{

Link p;

p = head;

if(p == NULL)

{

printf("No fine link.\n");

}

else if(p->next != NULL)

{

while(p->next != NULL)

{

p = p->next;

printf("name:%s\t",p->name);

printf("phone number:%d\n",p->num);

}

}

}

void alter_address(Link head)

{

Link p;

int order;

p = head->next;

char temp[20];

printf("请输入要修改的人的名字。\n");

getchar();

gets(temp);

printf("输入1为修改名字,输入2为修改电话。\n");

scanf("%d",&order);

if(p == NULL)

{

printf("Address is empty!.\n");

}

else

{

while(p != NULL)

{

if(strcmp(temp,p->name) == 0)

{

break;

}

p = p->next;

}

if(order == 1)

{

printf("Input name:\n");

getchar();

gets(p->name);

}

else if(order == 2)

{

printf("Input number.\n");

scanf("%d",&p->num);

}

else

{

printf("输入错误。\n");

}

}

}

void inquire_address(Link head)

{

Link p;

char temp[20];

p = head->next;

printf("输入要查询的人的名字。\n");

getchar();

gets(temp);

if(p == NULL)

{

printf("Address is empty.\n");

}

else

{

while(p != NULL)

{

if(strcmp(temp,p->name) == 0)

{

printf("查询为:\n");

printf("name:%s\t",p->name);

printf("num:%d\n",p->num);

}

p = p->next;

}

}

}

void del_node(Link head)

{

Link p,q;

char name[20];

q = head;

p = head->next;

printf("请输入要删除的人的名字。\n");

getchar();

gets(name);

if(p == NULL)

{

printf("Link is empty.\n");

}

else

{

while(strcmp(p->name,name) != 0 && p->next != NULL)

{

q = p;

p = p->next;

}

if(p->next == NULL && strcmp(p->name,name) != 0)

{

printf("没有找到。\n");

}

else

{

q->next = p->next;

free(p);

}

}

}

void release_link(Link * head)

{

Link p;

p = *head;

if(p == NULL)

{

printf("No link\n");

}

else

{

while(*head != NULL)

{

*head = (*head)->next;

free(p);

p = *head;

}

}

}

int main()

{

Link head = NULL;

Link new_node = NULL;

int order;

do

{

wellcome();

scanf("%d",&order);

if(order == 1)

{

create_address(&head,&new_node);

}

if(order == 2)

{

display(head);

}

if(order == 3)

{

alter_address(head);

}

if(order == 4)

{

inquire_address(head);

}

if(order == 5)

{

del_node(head);

}

}while(order != 6);

release_link(&head);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值