题意:咱们将实现一个用于存储sing的ADT 用于在咱们的购物列表中存储单个我的项目
item_create(name,amount,price,priority)在堆内存中创立一个购物我的项目并返回指向它的指针。具体规格请参阅shopping.h。请留神,字符串名称必须复制到shopping item构造中;价格以每金额的美分为单位。item_clone(item)在堆内存中创立另一个项的正本并返回指向它的指针。具体规格请参阅shopping.h。item_read(item)应用输出的数据创立单个购物项。函数返回正确读取的购物项目数,即0或1。您能够假如购物商品的名称不超过42个字符。请参阅shopping.h以理解具体规格和正确的输出格局。请留神,参数项是以struct shpg_item(指针指针)的模式给出的:依据C内存模型,思考这意味着什么,并查看main中的正确调用格局。item_destroy(item)从item开释所有资源。item_combine(dest,source)通过将起源信息合并到dest中,将两个购物我的项目组合为一个。两个购物商品只有在名称雷同的状况下才能够组合在一起(只管大小写并不重要!)。当合并两个我的项目时,金额相加;价格取两个金额的平均值;新的优先级是两个优先级中较高的一个。item_print(item)打印出item。您能够在printf调用中应用以下格局字符串:“%s:%dx,$%d.%02d,<%d>n”。comp_by_name(i1,i2)比拟两种购物商品的名称。如果i1在i2之前排序,则函数返回-1;如果i1在i2之后排序,则返回1;如果i1和i2的名称雷同,则返回0。请留神,此函数不思考大小写:“Apple”、“Apple”和“Apple”都将被视为相等。comp_by_priority(i1,i2)比拟两个购物我的项目的优先级。如果i1在i2之前排序,则函数返回-1;如果i1在i2之后排序,则返回1;如果i1和i2具备雷同的优先级,则返回0。对于咱们存储在堆内存中的每一个数据,咱们都必须通过一个指针类型的变量与之交互。例如,当创立struct shpg_项时,咱们通过struct shpg_item与它交互。咱们能够将这些构造的多个存储在一个shopping item数组中,该数组的类型为struct shpg_item。请留神,这些具备两个间接寻址级别的数组在内存中的存储形式与您预期的不同:对于一个级别,例如int arr[]={1,2,3};,整数值被严密地压缩在相邻的内存单元中。对于两个级别,例如struct foo*arr,指向struct foo的指针是严密打包的,然而构造自身能够位于堆内存中的任何地位。
波及优先级抉择,
更多探讨能够+V:abby12468