void Insert(book*h) //添加图书(运用到单链表的前插法) { book*p; p = (book*)malloc(sizeof(book)); //动态内存分配 printf("IBSN:"); scanf("%s", &p->date.ISBN); //添加图书的ISBN、书名、作者、出版社、价格等信息 printf("书名:"); scanf("%s", &p->date.name); printf("作者:"); scanf("%s",&p->date.writer); printf("出版社:"); scanf("%s",&p->date.ad); printf("价格:"); scanf("%s", &p->date.price); //将元素值赋给结点*p的数据域 p->next = h->next; //将新结点*p插入到头结点之后 h->next = p; }
时间: 2024-04-03 21:34:10 浏览: 53
这段代码是控制台图书管理系统中的添加图书函数。它会要求用户输入新的图书信息,然后将该图书插入到图书链表的头部。
具体来说,这个函数会定义一个指向链表头结点的指针 `h`,并动态分配一个新的图书结点 `p`。然后,它会要求用户分别输入图书的 ISBN 号、书名、作者、出版社和价格等信息,并将这些信息存储到结点 `p` 中。接着,它将结点 `p` 插入到链表头部,并将头指针 `h` 指向新的结点 `p`。
需要注意的是,这个函数中使用了动态内存分配函数 `malloc` 来分配新的结点内存。由于本函数会修改链表结构,因此它需要传入一个指向链表头结点的指针 `h`。
相关问题
void insertBook(MaBook** p, Book book) { // insertBook(&p, book3); MaBook* p = NULL; MaBook *newBook = initBook(book); if (*p == NULL) { *p = newBook; return; } (*p)->front = newBook; newBook->next = *p; *p = newBook; }
这段代码是用来实现向一个链表中插入一本书的函数。函数的参数包括一个指向指针的指针 p 和一本书的信息 book。首先,它通过调用 initBook 函数创建了一个新的链表节点 newBook,并将 book 的信息存储在新节点中。然后,它检查指针 *p 是否为空。如果是空链表,就将新节点 *p 的指向,使其成为链表的第一个节点,然后返回函数。如果不是空链表,就把新节点插入到链表的头部,然后更新指针 *p 指向新节点,使其成为新的链表头部。
void Insert(book*h)//插入(头插法) { book*p; p = (book*)malloc(sizeof(book)); printf("IBSN:"); scanf("%s", &p->date.ISBN); printf("书名:"); scanf("%s", &p->date.name); printf("作者:"); scanf("%s",&p->date.writer); printf("出版社:"); scanf("%s",&p->date.ad); printf("价格:"); scanf("%s", &p->date.price); p->next = h->next; h->next = p; }
这段代码是用头插法实现链表的插入操作,其中book是一个结构体类型,包含了date和next两个成员变量。date是另一个结构体类型,包含了书的ISBN、书名、作者、出版社和价格等信息。next是一个指针类型,指向下一个节点。
在函数中,首先通过malloc函数动态分配了一个book类型的指针p,然后让用户输入书的信息,并将这些信息存储在p的date成员变量中。接着将p插入到链表中,具体做法是将p的next指针指向头节点的下一个节点,再将头节点的next指针指向p,这样就完成了插入操作。
需要注意的是,该函数中没有对用户输入的内容进行任何的检查和过滤,因此存在输入非法数据导致程序崩溃的风险。建议在实际使用中加入相应的输入检查和异常处理机制。
阅读全文