单链表——头插法
#include <stdio.h>
#include <stdlib.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,*temp;
book=(struct Book*)malloc(sizeof(struct Book));
if(book==NULL){
printf("内存分配错误\n");
}
else{
//printf("内存分配成功\n");
}
get(book);
if(*library!=NULL){
temp=*library;
*library=book;
book->next=temp;
}
else{
*library=book;
book->next=NULL;
}
}
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++;
}
}
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;
int ch;
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);
}
}
release(&library);
return 0;
}
单链表——尾插法
#include <stdio.h>
#include <stdlib.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,*temp;
book=(struct Book*)malloc(sizeof(struct Book));
if(book==NULL){
printf("内存分配错误\n");
}
else{
//printf("内存分配成功\n");
}
get(book);
if(*library!=NULL){
temp=*library;
*library=book;
book->next=temp;
}
else{
*library=book;
book->next=NULL;
}
}
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++;
}
}
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;
int ch;
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);
}
}
release(&library);
return 0;
}