シングルリンクウォッチヘッド挿入方法-小さなカメ

単一のリンクリストの頭の挿入

#include<stdio.h> 
#include<malloc.h>
void getInput(struct Book *book);//此函数用来输入结构体中的内容 
void addBook(struct Book **library);//此函数用来增加新节点 
void printLibrary(struct Book *library);//此函数用来打印函数 
void releaseLibrary(struct Book **library);//此函数用来释放申请的空间 
struct Book//前两个合称为信息域,后一个为指针域 
{
    
    //信息域也可称为节点 
	char title[120];
	char author[40];
	struct Book *next; 
};
void getInput(struct Book *book)//传递指针
{
    
    
	printf("请输入书名:");
	scanf("%s",book->title );
	printf("请输入作者:");
	scanf("%s",book->author ); 
 } 
void addBook(struct Book **library)//使用二级指针可以修改一级指针的指向问题  
{
    
    
	struct Book *book,*temp;//定义一个结构体变量book,和一个临时用来存放头指针指向的地址的临时变量 
	book =(struct Book *) malloc(sizeof(struct Book));//为定义的结构体变量申请空间,存放于堆中 
	getInput(book);//为结构体变量book填充内容 
	
	if( *library != NULL)
	{
    
    
		temp = *library;//头指针指向的地址,存放于变量temp中 
		*library = book;//头指针指向新生成的book节点 
		book->next = temp;//新生成book节点的指针域指向,头指针指向的地址
	}
	else
	{
    
    
		*library = book;//头指针指向新生成的book节点 
		book->next = NULL;//新生成的节点的指针域指向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",book->author );
		book = book->next ;
		count++;
		printf("\n");
	}
}
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;//定义一个结构体类型的头指针
	int i;
	for(i=0;i<3;i++) //3次循环,申请三个新节点
		addBook(&library);//修改指针的值,把指针的地址传进去 
	printLibrary(library);//传递头指针给打印函数 
	releaseLibrary(&library);//释放申请的空间 
	return 0;
}

ここに画像の説明を挿入
これは、単一リンクリストの外観です。ヘッドは、最初のノードの情報フィールドを指すヘッドポインターであり、最初のノードのポインターフィールドは、次のノードの情報フィールドを指します。最後のノードのポインタフィールドがNULLを指していることを知って、このリンクリストは終了します。
この関数の説明:
ステップ1:ヘッドポインターがNULLを指していることを宣言します。addBook関数を呼び出して、新しいノードを追加します。注:(libraryはポインター変数libraryが指すアドレス、&libraryはポインター変数のアドレスです。ヘッドポインターの内容を変更する場合は、ヘッドポインターのアドレスを渡す必要があるため、渡される内容は次のとおりです。 addBookでは&library);
ステップ2:addBookでは新しいノードブックを定義し、そのブックのメモリスペースを申請します。getInput関数を使用して、新しく生成されたノードのコンテンツを入力します。注:(ヘッドポインターの方向を変更する問題があるため、セカンダリポインターはヘッドポインターのアドレスを受け入れるために使用されます)。
ステップ3:次のサイクルで新しいノードを追加します。ヘッドポインタの方向をもう一度変更します。新しく生成されたノードを指し、新しく生成されたノードのポインタフィールドは前のノードの情報フィールドを指します。したがって、入力後の入力を前面に挿入し、入力後の入力を先に出力します。これは、単一リンクリストのヘッド挿入方法と呼ばれます。図に示すように、
ここに画像の説明を挿入
点線は新しいノードを接続します。新しいノードのヘッドポインタとポインタフィールドを変更すると、新しいノードが挿入されます。

おすすめ

転載: blog.csdn.net/qq_52208569/article/details/110187745
おすすめ