数据结构单链表通讯录Word文档格式.docx

上传人:b****5 文档编号:18113298 上传时间:2022-12-13 格式:DOCX 页数:24 大小:206.54KB
下载 相关 举报
数据结构单链表通讯录Word文档格式.docx_第1页
第1页 / 共24页
数据结构单链表通讯录Word文档格式.docx_第2页
第2页 / 共24页
数据结构单链表通讯录Word文档格式.docx_第3页
第3页 / 共24页
数据结构单链表通讯录Word文档格式.docx_第4页
第4页 / 共24页
数据结构单链表通讯录Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据结构单链表通讯录Word文档格式.docx

《数据结构单链表通讯录Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构单链表通讯录Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

数据结构单链表通讯录Word文档格式.docx

stdlib.h>

string.h>

#defineNewsp(TxlList*)malloc(sizeof(structTxlList))

typedefstructTxlList

{

charName[16];

//姓名

charMTel[11];

//手机号

charTel[9];

//固定电话

charEMail[16];

//邮箱地址

charBornAddr[20];

//籍贯(值域:

"

北京"

、"

上海"

大连"

等等,只写城市名称)

charBroadN[50];

//博客名

structTxlList*next;

//指针域

}TxlList,*TxlLink;

voidLbuild1(TxlLink&

T){//创建文件

FILE*fp;

TxlLinkq;

q=Newsp;

q=T;

intNUM;

charfilename[20];

printf("

\n*请输入要创建的通讯录名:

\n"

);

gets(filename);

if((fp=fopen(filename,"

wb"

))==NULL){/*以写方式在当前目录打开(新建)文件*/

printf("

can'

topenfile\n"

exit(0);

//如果文件无法打开,关闭已经打开的其它文件,结束程序。

}

printf("

*请输入要储存的人数:

scanf("

%d"

&

NUM);

getchar();

for(inta=0;

a<

NUM;

a++){

TxlLinkp;

p=Newsp;

\n*请输入第%d个人的数据,按回车键结束,数据若为空请输“无”"

a+1);

printf("

\n*姓名:

gets(p->

Name);

*手机号:

MTel);

*固定电话:

Tel);

*邮箱地址:

EMail);

*籍贯:

BornAddr);

*博客名:

BroadN);

p->

next=NULL;

q->

next=p;

q=q->

next;

if(fprintf(fp,"

%s%s%s%s%s%s\n"

p->

Name,p->

MTel,p->

Tel,p->

EMail,p->

BornAddr,p->

BroadN)==1)//向文件中一次写一个结构体量值

{

printf("

filewriteerror\n"

break;

}

fclose(fp);

}

voidLbuild2(TxlLink&

T){//读取文件

TxlLinkq;

q=Newsp;

q=T;

charfilename[20];

printf("

\n*请输入要读取的通讯表名:

gets(filename);

if((fp=fopen(filename,"

rb"

))==NULL){

exit(0);

}

while(!

feof(fp)){

TxlLinkp;

p=Newsp;

fscanf(fp,"

%s%s%s%s%s%s"

q->

p->

q=q->

fclose(fp);

voidBuild(TxlLink&

T){//选择建立方式的函数

intChoice;

*******************************************************************"

);

\n*请输入想要实现的功能编号:

*1.新建通讯录;

\n*2.输出已有有通讯录;

\n*其它-退出。

\n*选择为:

scanf("

Choice);

getchar();

switch(Choice){

case1:

{

Lbuild1(T);

break;

}

case2:

{

Lbuild2(T);

break;

default:

{

无通讯录\n\n"

break;

}

voidUpdate(TxlLink&

T,char*Name,char*MTel){//将姓名为Name的好友的手机号改为MTel;

TxlLinkp;

p=T->

while(p){

if(strcmp(p->

Name,Name)==0){

strcpy(p->

MTel,MTel);

p=p->

voidBuildnew(TxlLink&

T){//创建一个空资料单元

chara[]="

无"

;

strcpy(T->

Name,a);

MTel,a);

EMail,a);

BornAddr,a);

BroadN,a);

Tel,a);

T->

voidOutPut(TxlLinkT){//输出通讯表数据

p=Newsp;

\n*通讯录信息:

\n姓名,手机号,固定电话,邮箱地址,籍贯,博客名分别为:

voidSort(TxlLink&

T){//将该通讯录按照好友姓名进行非递减排序

TxlLinkp,q,r;

p=T;

q=p->

intSUM=0;

while(q){//记录通讯表数据个数

SUM++;

q=q->

for(inti=0;

i<

SUM;

i++){

for(intj=0;

j<

SUM-i;

j++){

r=q->

if(r){

if(strcmp(q->

Name,r->

Name)>

0){

next=r;

next=r->

r->

next=q;

p=p->

q=p->

p=T;

q=p->

r=q->

voidMerge(TxlLink&

T1,TxlLink&

T2){//将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个

Sort(T1);

Sort(T2);

TxlLinkp,q,r,t,head;

p=T1->

q=T2->

head=T1;

while(p||q){

r=p;

t=q;

if(strcmp(p->

Name,q->

0)

head->

next=t;

head=head->

w"

elseif(strcmp(p->

Name)<

else{

MTel,q->

MTel)>

0){

q=q->

head->

head=head->

elseif(strcmp(p->

MTel)<

else{

free(r);

x"

if(!

p){

while(q){

q){

while(p){

T2=T1;

voidInsert(TxlLink&

T,char*Name,char*MTel){//插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>

Name的结点放到该结点后面;

Sort(T);

intn=1;

r=Newsp;

Buildnew(r);

strcpy(r->

Name,Name);

while(q){

=0)

T->

r->

n=0;

=0){

n=0;

if(n==1){

p->

intCount(TxlLinkT){//统计籍贯是某地的好友人数;

intx=0;

charBornAddr[20];

*请输入要查询的地址:

gets(BornAddr);

BornAddr,BornAddr)==0)

x++;

returnx;

intNumber1(TxlLinkp,TxlLink&

r,TxlLink&

t,intk){//运用递归方法找到倒数第k个结点的地址

if(p){

q=p;

x=Number1(p,r,t,k)+1;

if(k==x)

r=q;

if((k+1)==x)

t=q;

intNumber2(TxlLinkp,TxlLink&

t,int&

k){//运用递归方法找到倒数第k个的地址

k++;

x=Number2(p,r,t,k)+1;

if((k/2)==x)

if((k/2+1)==x)

voidMoveK(TxlLink&

T,intk){//将通讯录中倒数第k个结点之后的所有结点移到头结点后面

intx;

TxlLinkp,q,r,t;

x=Number1(p,r,t,k);

t->

while(r){

q=r;

r=r->

q->

voidReverseN(TxlLinkT){//将通讯录的正中间位置结点之后的全部结点倒置

intk=0;

Number2(p,r,t,k);

intmain(void){

TxlLinkP;

intx=1;

P=Newsp;

Build(P);

while(x){

*1.排序;

\n*2.插入信息;

\n*3.更改手机;

\n*4.合并;

\n*5.统计籍贯人数;

\n*6.移节点;

\n*7.倒置链表;

\n*其它-退出。

switch(Choice)

case1:

\n************************排序前的通讯表*************************\n"

OutPut(P);

Sort(P);

\n************************排序后的通讯表*************************\n"

case2:

\n*************************插入前的通讯录*************************\n"

OutPut(P);

charname[16],mtel[11];

\n*请输入要插入的好友姓名:

gets(name);

\n*请输入要插入的好友号码:

gets(mtel);

Insert(P,name,mtel);

\n*************************插入后的通讯录*************************\n"

********************************************************************"

case3:

\n*************************改写前的通讯录*************************\n"

\n*请输入要改写的好友姓名:

\n*请输入要改写的好友号码:

Update(P,name,mtel);

\n*************************改写后的通讯录*************************\n"

}

case4:

TxlLinkQ;

Q=Newsp;

\n*建立另一个通讯录\n"

Build(Q);

\n*第一个通讯录\n"

\n*第二个通讯录\n"

OutPut(Q);

Merge(P,Q);

\n**********************合并并排序后的通讯录***********************\n"

case5:

intN;

\n***************************输出通讯录***************************\n"

N=Count(P);

\n*统计结果为:

\n*共%d个人\n"

N);

case6:

intn;

\n*请输入移动节点数:

\nn="

n);

\n*移动前的通讯录:

MoveK(P,n);

\n*移动后的通讯录:

case7:

\n*************************倒置前的通讯录*************************\n"

ReverseN(P);

\n*************************倒置后的通讯录*************************\n"

default:

x=0;

}

return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1