优化以下代码 int ItemDB_AddItem(const struct Item *p_item) /*把p_item指向的物品加入数据库中*/ //成功则返回1,否则返回0 { struct Item_Node *p,*p_new; p_new=(struct Item_Node *)malloc(sizeof(struct Item)); p=item_database_head; if(item_database_head==NULL) { item_database_head=p_new; p_new=p_item; p_new->next=NULL; } if(item_database_head!=NULL) { while(p->next!=NULL) { p=p->next; } p->next=p_new; p_new=p_item; p_new->next=NULL; } ++num_items; return 1; }
时间: 2023-06-24 13:08:47 浏览: 143
以下是优化后的代码:
int ItemDB_AddItem(const struct Item *p_item) {
struct Item_Node *p_new = (struct Item_Node *)malloc(sizeof(struct Item_Node));
if (p_new == NULL) {
return 0;
}
p_new->item = *p_item;
p_new->next = NULL;
if (item_database_head == NULL) {
item_database_head = p_new;
} else {
struct Item_Node *p = item_database_head;
while (p->next != NULL) {
p = p->next;
}
p->next = p_new;
}
++num_items;
return 1;
}
主要的改进有:
1. 将申请内存和初始化节点合并到一起,减少了一次节点初始化的操作。
2. 对于内存申请失败的情况进行了处理,避免了悬挂指针的问题。
3. 将 p_new = p_item 和 p_new->next = NULL 的赋值语句交换了顺序,使得代码的逻辑更加清晰。
4. 在遍历链表时,使用了一个指针 p,而不是直接使用头节点 item_database_head,这样可以避免修改头指针的问题。
5. 去掉了 if(item_database_head!=NULL) 这个无用的判断。
阅读全文