# include<stdio.h>
# include<stdlib.h>
//头插法
struct Book//结构体类型
{
char title[128];
char author[40];//信息域
struct Book *next;//next是个指针
} ;
void getInput(struct Book *book)//传一个Book结构的指针 ,根据指针修改结构体的内容
{
printf("请输入书名:");
scanf("%s",book->title) ;//传过来的是指针,直接用 箭头
printf("请输入作者:");
scanf("%s",book->author) ;
}
void addBook(struct Book **library)//因为要修改*library的值,所以要修改*library的地址
{
struct Book *book,*temp;//定义Book结构体指针变量book,中间指针变量temp
static struct Book *tail;
book= (struct Book *)malloc(sizeof (struct Book)) ;//强制类型转换为stuct Book类型的指针变量
if(book==NULL)
{
printf("内存分配失败了!\n");//通常是不会分配失败,一切为了代码的健壮性
exit(1);//强制退出,给他一个错误代码1
//这需要<stdlib.h>头文件支持
}
getInput(book); //用户填充信息域 用getInput函数实现 ,传过去的参数就是结构的地址 book
if(*library!=NULL)//不等于NULL说明中是有数据的
{/*while((*library)->next!=NULL)//*的运算级没有->高,所以要加括号
*library=(*library)->next;
(*library)->next=book;
book->next=NULL;*/
tail->next=book;
book->next =NULL;
/* temp=*library;
//
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next =book;
book->next=NULL;*/
}
else//等于NULL比较容易
{
*library=book;//将头指针指向新生成的节点 book就是新生成信息域的地址
book->next=NULL;//再将新的后继指向NULL
}
tail=book;
}
void printLibrary(struct Book *library)//打印书的内容 传递的是信息域的指针
{
struct Book *book;//因为我们要打印一本本书,所以将liberay传给book,提高可读性
int count=1;//count用来计算打印了多少本
book= library;
while(book!=NULL)
{
printf("Book%d:\n",count );
printf("书名:%s\n",book->title);
printf("作者:%s\n",book->author);
book=book->next;
count++;
}
}
void releaseLibrary(struct Book **library)//malloc申请的内存空间要用free给他释放掉
{
struct Book *temp;
while(*library!=NULL)
{
temp=*library;
*library=(*library)->next;
free(temp);
}
}
int main(void)
{
struct Book *library=NULL;//头指针是结构体的地址 现在是空的单链表
int ch;
//addBook(&library);//library是 信息域的地址,我们要想修改信息域指针的地址
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;
}
单链表 尾插法
最新推荐文章于 2024-10-03 19:44:45 发布