int insert ( LIST * pList ) { //判断链表是否存在 if ( NULL == pList ) { return ERROR; } LIST *p = creation ( ); char name[20]; int count=0; printf("请输入商品名:\n"); scanf("%s",&name); printf("请输入商品数量:\n"); scanf("%d",&count); if(add_goods(name,count,p)){ //头插法插入节点 p->pNext = pList->pNext; pList->pNext = p; printf ( "商品 %s 已经添加成功\r\n", p->data.name ); return OK; } }
时间: 2024-01-10 18:02:18 浏览: 121
这段代码是一个向链表中添加商品的函数,函数名为 insert,参数为一个指向链表的指针 pList。该函数先判断链表是否存在,如果不存在则直接返回错误。接着调用 creation 函数创建一个新节点,然后让用户输入商品名和商品数量。如果 add_goods 函数返回真,则说明添加成功,这时将新节点采用头插法插入到链表中,并输出添加成功的提示信息。如果 add_goods 函数返回假,则说明添加失败,不做任何操作。最后返回操作结果。
相关问题
struct goods { char name [SIZE];//货物名 int count;//货物数量 float price;//货物价格 }; typedef struct goods dataType; //定义一个结构体 typedef struct list { dataType data; struct list *pNext; }LIST; LIST lis; /* 函数名:creation 函数功能:创建一个空结点 函数参数:无 函数返回值:创建成功返回结点的地址,失败返回NULL */ LIST * creation ( ) { //定义指针变量 LIST *pList = NULL; //申请空间 pList = ( LIST * ) malloc ( sizeof ( LIST ) ); //判断,初始化 if ( NULL == pList ) { return NULL; } memset ( pList, 0, sizeof ( LIST ) ); return pList; } /** * 增加商品 * @param name 商品名 * @param count 数量 * @param p 节点 * @return 成功则返回true */ bool add_goods(char name[],int count,LIST *p){ if ( NULL == p ) { return false; } //赋值 strcpy(p->data.name,name); p->data.count = count; return true; }
这段代码定义了一个结构体 dataType,其中包含了货物名货物数量和货物价格三个属性。后定义了一个链表结构体 LIST,其中包含了一个 dataType 类型的数据域和一个指向下一个节点的指针。接着定义了一个 LIST 类型的全局变量 lis。
接下来是一个名为 creation 的函数,其作用是创建一个空节点并返回该节点的地址。首先定义了一个 LIST 指针变量 pList,并动态分配了一个 LIST 结构体大小的内存空间并将其地址赋值给 pList。然后判断 pList 是否分配成功,如果不成功则返回 NULL。最后将 pList 清零并返回 pList 的地址。
接下来是一个名为 add_goods 的函数,该函数用于向链表中添加一个货物。其参数为一个商品名 name、一个数量 count 和一个指向链表节点的指针 p。首先判断 p 是否为空,如果为空则返回假。然后将 name 和 count 赋值给 p 的 data 属性,最后返回真表示添加成功。
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node * next; } Node; void pushBackList(Node ** pList, int data) { Node * p; Node * newNode = (Node *)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; if (*pList == NULL) { *pList = newNode; return; } for (p=*pList; p->next!=NULL; p=p->next) ; void printList(Node * p) { for (; p!=NULL; p=p->next) { printf("%d ", p->data); } puts(""); }void freeList(Node ** pList) { Node * p = *pList; while (p!=NULL) { Node * t = p; p=p->next; free(t); } *pList = NULL; } int sizeList(Node * p) {: int i; for (i=0; p!=NULL; p=p->next) i++; return i; } int main(void) { Node * list = NULL; pushBackList(&list, 10); pushBackList(&list, 20); pushBackList(&list, 30); pushBackList(&list, 40); printList(list); printf("size = %d\n", sizeList(list)); freeList(&list); return 0; }解释一下
这是一个使用链表实现的简单程序,其中包含了以下几个函数:
1. pushBackList: 实现向链表末尾添加新节点的功能。该函数接收一个指向指针的指针 pList 和一个整数 data,用于将 data 新增为链表的一部分。如果链表为空,则将新节点作为链表的第一个节点;否则,遍历链表直到到达链表末尾,将新节点添加到链表的末尾。
2. printList: 实现遍历链表并输出链表中各节点的 data 值的功能。该函数接收一个指向链表的指针 p,并通过循环遍历链表中的每个节点,输出节点的 data 值。
3. freeList: 实现释放链表内存的功能。该函数接收一个指向指针的指针 pList,通过循环遍历链表,依次释放链表中每个节点的内存空间,并将链表的头节点指针指向 NULL。
4. sizeList: 实现计算链表长度的功能。该函数接收一个指向链表的指针 p,通过循环遍历链表,计算链表中节点的数量,并返回该值。
在 main 函数中,首先定义了一个空链表 list,然后通过 pushBackList 函数向链表中添加了四个节点,每个节点的 data 值分别为 10、20、30、40。接着调用 printList 函数输出链表中的节点数据,并使用 sizeList 函数计算链表长度。最后调用 freeList 函数释放链表内存。
阅读全文