单链表通讯录作业

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h> 
#include<iostream>
using namespace std; 
typedef struct Stu
{
   
long long id;//学生ID 
char name[10];//学生姓名 
long long tel;//学生电话号码 
struct Stu*next;//next链表指针 
}stud;//使用long long长整型是因为int和long的数据类型的长度不足以支持到11位 
FILE *fp; //文件指针,便于接下来对文件进行操作 

void CreLi(stud *&s)//以函数的形式创建链表,方便在主函数中直接调用 
{
   
s=(stud *)malloc(sizeof(stud));//分配空间 
s->next=NULL;//将头指为空 
}

void Loading(stud * &s,long long ID,char *Name,long long Tel)//将新建的数据以节点形式传入 
{
   //使用&是为了将载入数据的链表带回主函数 
stud *r,*t=s;//将t指为s,并用while函数指向其末尾; 
while(t->next!=NULL)
{
   
t=t->next;
}
r=(stud *)malloc(sizeof(stud));//为临时数据的临时节点分配空间 
r->id=ID;
strcpy(r->name,Name);
r->tel=Tel;
//以上三步将传入的值赋给临时节点 
r->next=NULL;//确保末尾指向空 
t->next=(stud*)malloc(sizeof(stud));//为t的下一节点分配空降 
t->next=r;//将临时变量的值赋给t链 
}

bool DeLi(stud * &s,long long ID) //删除记录
{
   
stud *r=s,*q,*pre
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 
   第二个模块——Menu()的功能是:显示提示选单。 
   第三个模块——Quit()的功能是:退出选单。 
   第四个模块——Create()的功能是:创建新的数据记录。 
   第五个模块——Add()的功能是:增加新的数据记录,并返回选单。 
   第六个模块——Find()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 
   第七个模块——Alter()[的功能是:修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 
   第八个模块——Delete()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 
   第九个模块——List()的功能是:显示所有记录。 一、用链表或者顺序表实现以下系统,完成线性表的建立(至少包括10个结点),以及线性表中信息(结点)的插入、查找、删除、修改、输出等操作,具体的模块要求见上方的“总的模块要求”。建议用“文件”存储数据。 1.通讯录管理系统的设计与实现 (1)通讯者信息包括:编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20]) (2)除了总的模块要求外,还需统计通讯录中男性人数及女性人数,并求出通讯录中的第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 
   第二个模块——Menu()的功能是:显示提示选单。 
   第三个模块——Quit()的功能是:退出选单。 
   第四个模块——Create()的功能是:创建新的数据记录。 
   第五个模块——Add()的功能是:增加新的数据记录,并返回选单。 
   第六个模块——Find()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 
   第七个模块——Alter()[的功能是:修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 
   第八个模块——Delete()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 
   第九个模块——List()的功能是:显示所有记录。 一、用链表或者顺序表实现以下系统,完成线性表的建立(至少包括10个结点),以及线性表中信息(结点)的插入、查找、删除、修改、输出等操作,具体的模块要求见上方的“总的模块要求”。建议用“文件”存储数据。 1.通讯录管理系统的设计与实现 (1)通讯者信息包括:编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20]) (2)除了总的模块要求外,还需统计通讯录中男性人数及女性人数,并求出通讯录中的男女比例。 男女比例。
### 回答1: 好的,下面是一个简单的单链表通讯录的数据结构: ``` struct Contact { char name[50]; char phone[20]; char email[50]; struct Contact* next; }; typedef struct Contact* ContactPtr; ``` 上面的结构体定义了一个通讯录中联系人的信息,包括姓名、电话和电子邮件地址。每个联系人都有一个指向下一个联系人的指针。使用这个结构体,我们可以定义一个单链表通讯录。 下面是一个简单的实现示例,包括添加联系人、查找联系人和删除联系人等基本操作: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> struct Contact { char name[50]; char phone[20]; char email[50]; struct Contact* next; }; typedef struct Contact* ContactPtr; // 初始化通讯录 ContactPtr initContact() { ContactPtr head = (ContactPtr)malloc(sizeof(struct Contact)); head->next = NULL; return head; } // 添加联系人 void addContact(ContactPtr head, char name[], char phone[], char email[]) { ContactPtr newContact = (ContactPtr)malloc(sizeof(struct Contact)); strcpy(newContact->name, name); strcpy(newContact->phone, phone); strcpy(newContact->email, email); newContact->next = NULL; ContactPtr current = head; while (current->next != NULL) { current = current->next; } current->next = newContact; printf("联系人 %s 添加成功!\n", name); } // 查找联系人 void findContact(ContactPtr head, char name[]) { ContactPtr current = head->next; while (current != NULL) { if (strcmp(current->name, name) == 0) { printf("%s 的电话号码是:%s,电子邮件地址是:%s\n", current->name, current->phone, current->email); return; } current = current->next; } printf("未找到联系人 %s!\n", name); } // 删除联系人 void deleteContact(ContactPtr head, char name[]) { ContactPtr current = head; while (current->next != NULL) { if (strcmp(current->next->name, name) == 0) { ContactPtr temp = current->next; current->next = temp->next; free(temp); printf("联系人 %s 删除成功!\n", name); return; } current = current->next; } printf("未找到联系人 %s!\n", name); } // 打印所有联系人 void printContacts(ContactPtr head) { if (head->next == NULL) { printf("通讯录为空!\n"); return; } ContactPtr current = head->next; while (current != NULL) { printf("%s 的电话号码是:%s,电子邮件地址是:%s\n", current->name, current->phone, current->email); current = current->next; } } int main() { ContactPtr head = initContact(); addContact(head, "张三", "123456789", "zhangsan@example.com"); addContact(head, "李四", "987654321", "lisi@example.com"); addContact(head, "王五", "234567890", "wangwu@example.com"); printContacts(head); findContact(head, "张三"); findContact(head, "赵六"); deleteContact(head, "李四"); printContacts(head); return 0; } ``` 上面的代码实现了一个简单的单链表通讯录,包括添加联系人、查找联系人和删除联系人等基本操作。 ### 回答2: 单链表通讯录是一种基于数据结构的通讯录实现方式。通讯录中的每个联系人都被封装为一个节点,节点内包含联系人的信息和一个指向下一个节点的指针。该链表的头节点指向第一个联系人,最后一个联系人的节点指针为空。 单链表通讯录的优点是插入和删除联系人的操作高效。当需要插入一个新的联系人时,只需要修改指针的指向即可,无需移动其他节点。同样,删除联系人时也只需修改指针指向,不需要进行大量的数据迁移。这样可以大大提高操作的效率。 然而,单链表通讯录的缺点是查找联系人的效率相对较低。由于只能按顺序查找,当查找的联系人位于链表的末尾时,需要遍历整个链表寻找,时间复杂度较高。为了解决这个问题,可以使用更高效的数据结构,如哈希表来实现通讯录。 除了基本的插入、删除和查找操作,单链表通讯录还可以进行其他一些常见的操作,如修改联系人信息、排序联系人。修改联系人信息时,可以根据给定的姓名或其他关键字,遍历链表找到指定联系人并修改其信息。排序联系人时,可以使用冒泡排序等算法进行排序,将链表中的联系人按照一定的规则排序。 总的来说,单链表通讯录是一种简单而高效的通讯录实现方式。它具有插入、删除操作高效的优点,但查找效率相对较低。可以根据实际需求选择合适的数据结构来实现通讯录。 ### 回答3: 单链表通讯录是一种常见的数据结构,用于存储和管理联系人信息。通讯录中的每个联系人被表示为一个节点,节点包含姓名、电话号码等信息,并且有一个指向下一个节点的指针。 单链表通讯录的优点是插入、删除和查找操作都很高效。在插入操作时,只需将新的联系人节点插入到链表中,并更新相应的指针,即可完成插入操作。在删除操作时,只需修改相应节点的指针,即可将该联系人节点从链表中删除。在查找操作时,只需从头节点开始,依次遍历每个节点,直到找到目标联系人节点为止。 另一个优点是单链表通讯录能够动态地存储联系人信息。链表的长度可以根据需要进行动态调整,不需要预先分配固定的内存空间。这使得单链表通讯录更加灵活和节省内存空间。 然而,单链表通讯录也有一些缺点。首先,查询某个特定联系人节点的效率较低,需要遍历整个链表,尤其在链表较长时,效率较低。其次,在内存分配上可能存在空间浪费的问题,因为每个节点的指针需要占用额外的内存空间。 综上所述,单链表通讯录是一种高效、灵活的数据结构,适合用于存储和管理通讯录信息。但在应用中需要根据具体需求权衡其优缺点,选择合适的数据结构来实现通讯录功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值