python通讯录管理系统系统分析_通讯录管理系统的设计与实现

//实现通讯录结点的输出*/

LinkList CreateList(void) //尾插法建立带头结点的通讯录链表算法

{

LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点

ListNode *p,*rear;

char flag='y'; //结束标志置y

rear=head; //尾指针初始指向头结点

while (flag=='y')

{

p=(ListNode *)malloc(sizeof(ListNode)); //申新结点

printf("编号 姓名 性别 电话 地址 \n");

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

printf("输入的编号:\n");

scanf("%s",p-&gtdata.number);

printf("输入的姓名:\n");

scanf("%s",p-&gtdata.name);

printf("输入性别:\n");

scanf("%s",p-&gtdata.sex);

printf("输入电话:\n");

scanf("%s",p-&gtdata.telephone);

printf("输入地址:\n");

scanf("%s",p-&gtdata.address);

rear-&gtnext=p; //新结点连接到尾结点之后

rear=p; //尾指针指向新结点

printf("继续建表?(y/n):");

scanf("%s",&flag);

}

rear-&gtnext=NULL; //终端结点指针置空

return head; //返回链表头指针

}

void InsertNode(LinkList head,ListNode *p)//在通讯录链表head中插入结点

{

ListNode *p1,*p2;

p1=head;

p2=p1-&gtnext;

while(p2!=NULL && strcmp(p2-&gtdata.number,p-&gtdata.number)&lt0)

{

p1=p2; //p1指向刚访问过的结点

p2=p2-&gtnext; //p2指向表的下一个结点

}

p1-&gtnext=p; //插入p所指向的结点

p-&gtnext=p2; //连接表中剩余的结点

}

//新增通信录排序模块,排序比较简单,通过不断比较,结点指针相互赋值交换解决

void OrderList(ListNode *&l)//按编号排序,调用插入函数之后才可以排序

{

ListNode *p,*q,*s;

q=head;

p=q-&gtnext-&gtnext;

q-&gtnext-&gtnext=NULL;

while(p)

{

while(q-&gtnext&&(strcmp(p-&gtdata.number,q-&gtnext-&gtdata.number)&gt0))//比较字符串

q=q-&gtnext;

s=p-&gtnext;

p-&gtnext=q-&gtnext;

q-&gtnext=p;

p=s;

q=head;

}

}

ListNode *ListFind(LinkList head) //有序通讯录链表的查找

{

ListNode *p;

char number[10];

char name[20];

char t;

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

printf(" 1. 按编号 \n");

printf(" 2. 按姓名 \n");

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

printf("请 选 择1/2: ");

p=head-&gtnext; //假定通讯录表带有结点

scanf("%d",&t);

if (t==1)

{

printf("请输入所求的编号:");

scanf("%s",number);

while(p && strcmp(p-&gtdata.number,number)&lt0)//优化的地方

p=p-&gtnext;

if(p==NULL || strcmp(p-&gtdata.number,number)&gt0)

p=NULL; //没有查到要查找的通讯者

}

else

if (t==2)

{

printf(" 请输入要求的姓名:");

scanf("%s",name);

while(p&&strcmp(p-&gtdata.name,name)!=0)

p=p-&gtnext;

}

return p;

}

void DeleteNode(LinkList head) //通

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值