|
#include <stdio.h> #include <stdlib.h> /*与malloc.h差不多*/ #include <string.h> #define maxlen 100 struct persons { char name[10]; /*定义结构体数组用于缓存数据*/ char addr[20]; char phnum[10]; }persons[maxlen]; ; ; ; typedef struct lnode{ /*通讯录结构中结点的定义*/ char name[10]; /*姓名*/ char addr[20]; /*地址*/ char phnum[10]; /*电话*/ struct lnode *next; }listnode,*linklist; ; ; ; linklist head=NULL,r=NULL; /*定义头指针和尾指针*/ listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7; int i; char name1[10],ch; char str1[20]; FILE *fp; /*定义文件指针*/ ; ; void creat() /*将文件的信息读入结构体数组在转存入链表中*/ { int j; long k; fp=fopen("people.txt","r+t"); /*打开文件*/ if(fp!=NULL) {for(i=1;i<maxlen;i++) { j=fgetc(fp); if(j==EOF) return; k=i-1; fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/ fread(&persons[i],sizeof(struct persons),1,fp); s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/ strcpy(s->name,persons[i].name); strcpy(s->addr,persons[i].addr); strcpy(s->phnum,persons[i].phnum); if(head==NULL) /*用尾插法将其插入链表中*/ head=s; else r->next=s; r=s;} } else { fp=fopen("people.txt","w"); /*不能打开另开辟一个文件*/ i=1; } } ; ; ; void Show() /*显示所有的信息*/ { p1=head; while(p1!=NULL) { printf(" name:%s ",p1->name); printf(" addr:%s",p1->addr); printf(" phnum:%s",p1->phnum); p1=p1->next; } } ; ; ; void Delete() /*定义一个删除的函数*/ { printf(" please input the name:"); gets(name1); /*输入要删除人的姓名*/ p4=head; if(strcmp(p4->name,name1)==0) { p4=p4->next; /*根据各种情况判断可能性*/ head=p4; } else { while(strcmp(p4->next->name,name1)!=0) p4=p4->next; p5=p4->next; p4->next=p5->next; free(p5);
上一篇:双向链表的排序
下一篇:陀螺
|