2020-07-09

定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,并实现图书信息表的输出、查找、插入、删除等基本操作。

#include<stdio.h>
#include<stdlib.h>typedef struct Book_system //创建图书信息结构体{ char num[14]; char name[30]; int price; struct Book_system next;}Lnode,LinkList;void printlink(LinkList head) //输出所有图书信息{ LinkList p; p = head; while(p != NULL){ printf(“书号: %s 书名:%s 价格%d\n”,p->num,p->name,p->price); p = p->next; }}int getlink_node(LinkList head) //统计节点数{ int cnt=0; LinkList p = head; while(p != NULL) { cnt++; p = p->next; } return cnt;}LinkList insert_behind(LinkList head,LinkList new) //最后插入节点{ LinkList p=head; if(p==NULL){ head=new; return head; //如果节点为空,新节点就是头节点 } while(p->next!=NULL){ p=p->next; } p->next=new; //如果头节点不为空,寻找后面为空的节点,将新节点作为最后一个节点插入链表 return head;}LinkList creat_book_linklist(LinkList head) //动态创建链表{ int i=0; LinkList new; while(1){ new=(LinkList)malloc(sizeof(Lnode)); i++; printf(“请输入第%d本书的信息\n”,i); scanf("%s %s %d",new->num,new->name,&(new->price)); //为新节点的数据域赋值 if(new->price == 0){ printf(“quit\n”); free(new); return head; //新节点的价格作为判断依据,如果价格为0,终止创建链表。否则,继续创建。 } head=insert_behind(head,new); }}LinkList insert_link_behind(LinkList head,char num0,LinkList new) //指定位置后面插入新节点{ LinkList p=head; while(p!=NULL){ if(strcmp(p->num,num0)==0){ new->next=p->next; p->next=new; printf(“insert success\n”); return head; //寻找目标书号,将新节点插入目标书号后面 } p=p->next; } printf(“insert defeated\n”); //没有目标书号,插入失败} LinkList delet_node(LinkList head,char num1) //删除指定节点{ LinkList p=head; if(strcmp(p->num,num1)==0) { head=head->next; printf(“delet success”); return head; } while(p->next!=NULL){ if(strcmp(p->next->num,num1)==0) { p->next=p->next->next; printf(“delet success”); return head; } p=p->next; } printf(“delet defeated”);}LinkList new_message() //输入插入的新节点的数据{ LinkList new; new=(LinkList)malloc(sizeof(Lnode)); scanf("%s %s %d",new->num,new->name,&(new->price));// printf(“书号:%s 书名:%s 价格:%d\n”,new->num,new->name,new->price); return new;}int search_link(LinkList head,char num2) //查找目标信息{ while(head != NULL) { if(strcmp(head->num,num2)0){ printf(“书号: %s 书名:%s 价格%d\n”,head->num,head->name,head->price); return 1; } head = head->next; } return 0;}void menu() //菜单信息{ printf("\n********主菜单**\n"); printf(“1.创建列表\n"); printf("2.输出信息\n"); printf("3.插入信息\n"); printf("4.删除信息\n"); printf(“5.查找信息\n”); printf("*** 6.退出 *******\n”);}void choice_mode() //模式选择函数{ int a; int b; int choice; LinkList new; char num0=(char)malloc(14); char num1=(char)malloc(14); char num2=(char)malloc(14); LinkList head=NULL; menu(); while(1){ printf(“input your choice:\n”); scanf("%d",&choice); switch(choice) { case(1): head=creat_book_linklist(head); printf("\n \n"); break; case(2): printf(“图书清单:\n”); printlink(head); a=getlink_node(head); printf(“总数为%d\n”,a); printf("\n \n"); break; case(3): printf(“请输入插入位置的书号:\n”); scanf("%s",num0); printf(“请输入插入图书信息:\n”); new=new_message(); insert_link_behind(head,num0,new); printf("\n \n"); break; case(4): printf(“请输入删除的书号:\n”); scanf("%s",num1); head=delet_node(head,num1); printf("\n \n"); break; case(5): printf(“请输入查找的书号:\n”); scanf("%s",num2); b=search_link(head,num2); if(b1) printf(“find success\n”); else printf(“find defeated\n”); printf("\n \n"); break; case(6): printf(“退出程序\n”); return; break; } }}void main(){ choice_mode();}

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页