Problem1912--【高级语言程序设计】12.3 模拟手机通讯录

1912: 【高级语言程序设计】12.3 模拟手机通讯录

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 3  Solved: 1
[Submit] [Status] [Web Board] [Creator:]

Description

请编程实现手机通讯录管理系统,采用如下的结构体类型定义创建单向链表保存联系人的姓名和电话信息:

  1. struct friends
  2. {
  3. char name[20];
  4. char phone[12];
  5. struct friends *next;
  6. };

然后,采用单向链表编程完成以下功能(在主函数中依次调用这些函数即可): (1)建立单向链表来存放联系人的信息,如果输入大写‘Y’字符,则继续创建节点存储联系人信息,否则按任意键结束输入。 (2)输出链表中联系人的信息。 (3)查询联系人的信息。 (4)释放链表所占的内存。

Input

输入每个联系人姓名,电话; 是否继续输入,按 Y 键继续输入,其他键就结束; 输入要查找联系人姓名。 

Output

 输出所有联系人信息:姓名 电话; 输出查找的联系人姓名。

Sample Input Copy

wang 1363456
Y
li 34567890
Y
zhang 138964523
N
zhang

Sample Output Copy

wang 1363456
li 34567890
zhang 138964523
该联系人的姓名:zhang 电话:138964523

HINT

为了完成本关任务,你需要掌握:

  1. 单向链表;
  2. 算法思想。

单向链表

线性结构的链式存储也称为链表,相比于顺序表,链表能够解决顺序表中空间资源浪费问题以及空间不足的问题。链表的每一个结点包含数据域和指针域,而每一个结点在内存中的地址是不连续的,且能适应动态变化。在数据插入和数据删除操作效率比顺序表高,但在数据查找和修改效率较低,需要遍历链表。

链表又分为: 有头链表,头节点不存数据,所以数据操作都从头节点所指的下一节点开始,就不会误操作到头节点。故更加常用。

无头链表,第一个节点就存数据,但数据操作就要判断是否是头节点,不能对头节点操作,特别像删除操作就不能对头节点进行。

算法思想

创建单向链表存储信息,编写查找节点后的链表代码,最后释放链表所占的内存。

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
struct friends
{
    //=======begin=======


    //========end========
};
struct friends *CreatList(struct friends *head);
void PrintList(struct friends *head);
struct friends *Search(struct friends *head, char name[]);
void Pfree(struct friends *head);
int main(void)
{
    //=======begin=======





    //========end========
}
//函数功能:创建链表
struct friends *CreatList(struct friends *head)
{
    //=======begin=======





    //========end========
}
//函数功能:打印链表
void PrintList(struct friends *head)
{
    //=======begin=======



    //========end========
}
//函数功能:查询联系人信息
struct friends *Search(struct friends *head, char name[])
{
    //=======begin=======





    //========end========
}
//函数功能:释放链表中的节点
void Pfree(struct friends *head)
{
    //=======begin=======




    //========end========
}

Source/Category