马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
struct Book//定义单链表结点
{
char title[128];
char author[40];
struct Book *next;
};
void getInput(struct Book *book)
{
printf("请输入书名:");
fflush(stdin);
gets(book->title);
printf("请输入作者:");
scanf("%s",book->author);
}
void addBook(struct Book **library)//插入新结点
{
struct Book *book,*temp;
book=(struct Book *)malloc(sizeof(struct Book)) ;
if (book==NULL)
{
printf("内存分配失败");
exit(1);
}
getInput(book);
if(*library!=NULL)
{
temp=*library;
*library=book;
book->next=temp;
}
else
{
*library=book;
book->next=NULL;
}
}
void printLibrary(struct Book *library)
{
struct Book *book;
int count=1;
book=library;
while(book!=NULL)
{
printf("Book%d: ",count);
printf("书名: %s",book->title);
printf("作者:%s\n",book->author);
book=book->next;
count++;
}
}
void releaseLibrary(struct Book **library)
{
struct Book *temp;
while (*library!=NULL)
{
temp=*library;
*library=(*library)->next;
free(temp);
}
}
int main(void)
{
struct Book *library=NULL;
char ch;
while(1)
{
printf("请问是否需要输入书籍信息(Y/N):");
do
{
ch=getchar();
}while(ch!='Y'&& ch!='N');
if(ch=='Y')
{
addBook(&library);
}
else
{
break;
}
}
printf("请问是否需要打印书籍信息(Y/N):");
do
{
ch=getchar();
}while(ch!='Y'&& ch!='N');
if(ch=='Y')
{
printLibrary(library);
}
releaseLibrary(&library);
return 0;
}
有两个问题需要各位鱼友们解疑:
1.为什么说指针变量library是指向Book结构体的指针的指针?(我理解到的是:指针变量library是指向Book结构体的指针)
2.使用free()时为什么是free(*library)而不是free(book)?(我理解的是:因为申请空间malloc(sizeof(struct Book))时是赋给了book,最后不是应该释放book吗?)
我的理解是,添加节点的函数目的是改变library指向的指针的值,所以要传**的,也就是传这个指针的地址。
另外,free(temp)实际free的是*library也就是一个指向结构体的指针, addBook(&library);的时候已经把library当错参数传进去了,然后里面经过一些赋值,*library已经等于book了
|