本帖最后由 清尘yt 于 2019-8-16 13:45 编辑 //头插法相应操作
if(*library!=NULL) //单链表头插法的两种情况,相应的操作
{
temp=*library;
*library=book;
book->next=temp;
}
else
{
*library=book;
book->next=NULL;
}
//尾插法相应的操作 每次调用函数都循环遍历找到尾指针效率很低,推荐用指针存储每次调用后的 尾部位置!!!1
if(*library==NULL)
{
*library=book;
book->next=NULL;
}
else
{//设置一个中转变量,并循环遍历单链表直至找到 最后一个节点结束,所以temp此时存储的是最后一个节点地址
temp=*library;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=book;
book->next=NULL;
}
//高效版,用尾指针存储每次添加书籍之后的位置,所以定义一个尾指针tail来存储单链表尾部的地址。
static struct Book *tail; //这里很关键,必须是static类型的,不没有的话会造成每一次调用add函数时,tail重新初始化了。
……
if(*library==NULL)
{
*library=book;
book->next=NULL;
}
else
{
tail->next=book;
book->next=NULL;
}
tail=book;
|