链表
线性表
主要内容
开发一个图书管理系统,基本信息包括图书的书名,作者,ISBN号。
基本实现:
输出,输入,删除,查询,插入的基本功能。
#include#include #include #include #define maxsize 10000 typedef struct booknode{ char name[50]; char writer[20]; int number; }Book; typedef struct sqnode{ Book date; struct sqnode *next; }linklist; linklist *L; int n;//保存图书的本数 linklist* Initlist(linklist *L){ L=(linklist *)malloc(sizeof(linklist)); L->next=NULL; return L; } //输入 //尾插法建立链表 void InputNumber(linklist *L){ linklist *p,*r; r=L; printf("请输入链表中元素的个数:"); scanf("%d",&n); int i; printf("请输入%d个元素:",n); for(i=0;i date.name,p->date.writer,&p->date.number); p->next=r->next; r->next=p; r=p; } } //头插法建立链表 //输出 void outputlist(linklist *L){ linklist *p; p=L->next; printf("t书名t作者t书号n"); while(p!=NULL){ printf("t%st%st%dn",p->date.name,p->date.writer,p->date.number); p=p->next; } printf("n"); } //查找 void searchforname(linklist *L,char *name){ //按书名查询 int i; linklist *p; p=L->next; for(i=0;i date.name,name )==0) break; } if(i date.number,p->date.writer); p=p->next;} else printf("所查找的书籍不在列表内!n"); } void searchforwriter(linklist *L,char *writer){ //按作者查询 int i; linklist *p; p=L->next; for(i=0;i date.writer,writer)==0) break; } if(i date.number,p->date.name); p=p->next;} else printf("所查找的书籍不在列表内!"); } void searchfornumber(linklist *L,int number){ int i; linklist *p; p=L->next; for(i=0;i date.number)==number) break; } if(i date.number,p->date.writer,p->date.name); p=p->next;} else printf("所查找的书籍不在列表内!"); } void searchlist(linklist *L){ int choice; char name[20]; char writer[50]; int number; while(1){ printf("********现在开始查找*********n"); printf(" 1.按书名查找.n") ; printf(" 2.按作者查找.n") ; printf(" 3.按书号查找.n") ; printf(" 0.退出n") ; printf("请输入你的选择:"); scanf("%d",&choice); if(choice==0)break; switch(choice){ case 1:printf("请输入你要查找的书名:");scanf("%s",&name); searchforname(L,name);break; case 2:printf("请输入你要查找的作者:");scanf("%s",&writer); searchforwriter(L,writer);break; case 3:printf("请输入你要查找的书号:");scanf("%d",&number); searchfornumber(L,number);break; } } } //插入 void Insertlist(linklist *L,int i,Book e){ //在带头结点的单链线性表L中的第i个位置前插入元素e linklist *p,*s; int j; p=L;j=0; while(p!=NULL&&j next; j++; } if(p==NULL){ printf("Error!n"); return; } s=(linklist *)malloc(sizeof(linklist)); //生成新节点 s->date=e;s->next=p->next; //插入L中 p->next=s; } //删除 void Deltelist(linklist *L,int i,Book e){ //在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 linklist *p,*q; int j; p=L;j=0; while(p->next&&j next;++j; } if(!(p->next)||j>i-1){ printf("Error!n"); return; } q=(linklist *)malloc(sizeof(linklist)); q=p->next;p->next=q->next; //删除并释放结点 e=q->date;free(q); } int main(int argc, char *argv[]) { int choice; Book e; int i; while(1){ printf("******图书管理信息系统*********n"); printf(" 1.初始化.n"); printf(" 2.图书信息输入.n"); printf(" 3.图书信息输出.n"); printf(" 4.图书信息的查询.n"); printf(" 5.图书信息的插入.n"); printf(" 6.图书信息的删除.n"); printf(" 0.退出.n"); printf("请输入你的选择:"); scanf("%d",&choice); if(choice==0)break; else{ switch(choice){ case 1:L=Initlist(L);break; case 2:InputNumber(L);break; case 3:outputlist(L);break; case 4:printf("********现在开始查找*******n"); searchlist(L);break; case 5:printf("********现在开始插入*******n"); printf("请输入插入图书的信息:");scanf("%s%s%d",e.name,e.writer,&e.number); printf("请输入插入的位置:");scanf("%d",&i); Insertlist(L,i,e);break; case 6:printf("********现在开始删除*******n"); printf("请输入删除的位置:");scanf("%d",&i); Deltelist(L,i,e);break; } } } return 0; }
``
代码如下(运行结果省略——线性表)#include#include #include #define max 100 typedef struct booknode{ char name[50]; char writer[20]; int number; }Book; typedef struct listnode{ Book *elem; int length; }seqlist; seqlist L; //初始化 void Inistlist(seqlist *L){ L->elem=(Book *)malloc(max*sizeof(Book)); L->length=0; } //输入 void Inputelem(seqlist *L){ int i; printf("请输入书的数目:"); scanf("%d",&L->length); for(i=0;i length;i++){ scanf("%s%s%d",L->elem[i].name,L->elem[i].writer,&L->elem[i].number); } } //输出 void Outputelem(seqlist *L){ int i; printf("t书名t作者t书号n"); for(i=0;i length;i++) printf("t%st%st%dn",L->elem[i].name,L->elem[i].writer,L->elem[i].number); } //查找书名 void searchforname(seqlist *L,char *name){ int i; for(i=0;i length;i++){ if(strcmp(L->elem[i].name,name)==0) break; } if(i length) printf("查找的书名是%s的书号是:%d,作者是:%sn",name,L->elem[i].number,L->elem[i].writer); else printf("查无此书"); } //查找作者 void searchforwriter(seqlist *L,char *writer){ int i; for(i=0;i length;i++){ if(strcmp(L->elem[i].writer,writer)==0) break; } if(i length) printf("查找的作者是%s的书名是:%s,书号是:%dn",writer,L->elem[i].name,L->elem[i].number ); else printf("查无此书"); } //查找书号 void searchfornumber(seqlist *L,int number){ int i; for(i=0;i length;i++){ if(L->elem[i].number==number) break; } if(i length) printf("查找的书号是%d的书名是:%s,作者是:%sn",number,L->elem[i].name,L->elem[i].writer); else printf("查无此书"); } //查找位置 void searchforloc(seqlist *L,int i){ printf("第%d位置上的书是:%s,%s,%dn",i,L->elem[i-1].name,L->elem[i-1].writer,L->elem[i-1].number); } //查找 void searchlist(seqlist *L){ int choice,i,number; char name[20]; char writer[20]; while(1){ printf("*****查找方式*****n"); printf(" 1.按书名查找n"); printf(" 2.按作者查找n"); printf(" 3.按书号查找n"); printf(" 4.按位置查找n"); printf(" 0.退出n"); printf("输入查找方式:"); scanf("%d",&choice); if(choice==0) break; switch(choice){ case 1:printf("输入书名:");scanf("%s",name); searchforname(L,name);break; case 2:printf("输入查找的作者:");scanf("%s",writer); searchforwriter(L,writer);break; case 3:printf("输入查找的书号: ");scanf("%d",&number); searchfornumber(L,number);break; case 4:printf("输入查找的位置:");scanf("%d",&i); searchforloc(L,i);break; } } } //插入 int insertlist(seqlist *L){ int i; i=L->length; L->length=L->length+1; printf("插入书的书名,作者,书号: "); scanf("%s%s%d",L->elem[i].name,L->elem[i].writer,&L->elem[i].number); return L->length; } //根据书名删除 int delforname(seqlist *L,char name[20]){ int i; L->length=L->length-1; for(i=0;i length;i++){ if(strcmp(L->elem[i].name,name)==0) for(;i length;i++){ L->elem[i]=L->elem[i+1]; } break; } return L->length; } //根据作者删除 int delforwriter(seqlist *L,char writer[20]){ int i; L->length=L->length-1; for(i=0;i length;i++){ if(strcmp(L->elem[i].writer,writer)==0) for(;i length;i++){ L->elem[i]=L->elem[i+1]; } break; } return L->length; } //根据书号删除 int delfornumber(seqlist *L,int number){ int i; L->length=L->length-1; for(i=0;i length;i++){ if(L->elem[i].number==number) for(;i length;i++){ L->elem[i]=L->elem[i+1]; } break; } return L->length; } //根据位置删除 int delforloc(seqlist *L,int i){ int j; L->length=L->length-1; for(j=0;j length;j++){ if(i==1){ for(j=0;j length;j++) L->elem[j]=L->elem[j+1]; } if(j!=i-1)continue; else L->elem[j]=L->elem[j+1]; } return L->length; } //删除 void del(seqlist *L){ int choice,i,number; char name[20]; char writer[20]; while(1){ printf("*****删除方式*****n"); printf(" 1.按书名删除n"); printf(" 2.按作者删除n"); printf(" 3.按书号删除n"); printf(" 4.按位置删除n"); printf(" 0.退出n"); printf("输入删除方式:"); scanf("%d",&choice); if(choice==0) break; switch(choice){ case 1:printf("输入书名:");scanf("%s",name); delforname(L,name);break; case 2:printf("输入作者:");scanf("%s",writer); delforwriter(L,writer);break; case 3:printf("输入书号: ");scanf("%d",&number); delfornumber(L,number);break; case 4:printf("输入位置:");scanf("%d",&i); delforloc(L,i);break; } } } int main(int argc, char *argv[]){ int choice; char name[20]; while(1){ printf("*****图书管理系统*****n"); printf(" 1.初始化。n"); printf(" 2.图书信息输入。n"); printf(" 3.图书信息输出。n"); printf(" 4.图书信息查找。n"); printf(" 5.图书信息插入。n"); printf(" 6.图书信息删除。n"); printf(" 0.退出。n"); printf("请输入选项:"); scanf("%d",&choice); if(choice==0) break; else{ switch(choice){ case 1:Inistlist(&L);break;//初始化 case 2:Inputelem(&L);break;//输入 case 3:Outputelem(&L);break;//输出 case 4:searchlist(&L);break;//查找 case 5:insertlist(&L);break;//插入 case 6:del(&L);break;//删除 } } } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)