单链表搜索定位
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//单链表搜索
struct Book{
char title[40];
struct Book *next;
};
void get(struct Book *book){
printf("请输入书名:");
scanf("%s",book->title);
}
void add(struct Book **library){
struct Book *book;
static struct Book *tail;//单链表尾部
book=(struct Book*)malloc(sizeof(struct Book));
if(book==NULL){
printf("内存分配错误\n");
}
else{
//printf("内存分配成功\n");
}
get(book);
if(*library!=NULL){
tail->next=book;
book->next=NULL;
}
else{
*library=book;
book->next=NULL;
}
tail=book;
}
void put(struct Book *library){
struct Book *book;
int count=1;
book=library;
while(book!=NULL){
printf("Book%d:",count);
printf("书名:%s\n",book->title);
book=book->next;
count++;
}
}
struct Book*searchBook(struct Book *library,char *target){
struct Book *book;
book=library;
while(book!=NULL){
if(!strcmp(book->title,target)){
break;
}
book=book->next;
}
return book;
}
void printBook(struct Book *book){
printf("书名:%s\n",book->title);
}
void release(struct Book **library){
struct Book *temp;
while(*library!=NULL){
temp=*library;
*library=(*library)->next;
free(temp);
}
}
int main(void){
struct Book *library=NULL;
struct Book *book;
int ch;
char input[128];
while(1){
printf("是否录入图书数据(Y/N)\n");
do{
ch=getchar();
}while(ch!='Y'&&ch!='N');
if(ch=='Y'){
add(&library);
}
printf("是否打印图书数据(Y/N)\n");
do{
ch=getchar();
}while(ch!='Y'&&ch!='N');
if(ch=='Y'){
put(library);
}
printf("是否需要搜索(Y/N)\n");
do{
ch=getchar();
}while(ch!='Y'&&ch!='N');
if(ch=='Y'){
printf("请输入书名\n");
scanf("%s",input);
book=searchBook(library,input);
if(book==NULL){
printf("很抱歉没能找到\n");
}
else{
do{
printf("已找到符合条件的书籍...\n");
printBook(book);
}while((book=searchBook(book->next,input))!=NULL);
}
}
}
release(&library);
return 0;
}