worker* Linklist::find_name(string name) //按姓名查找 { worker* p = head; while (p->next != NULL) { if (p->next->m_name == name) { p->next->print(); return p->next; } else { p = p->next; } } cout << "该员工不存在!" << endl; }解释这段代码的原理
时间: 2023-04-06 08:03:33 浏览: 128
这段代码是一个链表查找函数,根据输入的姓名在链表中查找对应的员工信息。函数首先将链表头节点赋值给指针p,然后通过while循环遍历链表,如果找到了对应姓名的员工信息,则输出该员工信息并返回该员工节点的指针;如果遍历完整个链表都没有找到对应姓名的员工信息,则输出提示信息。该函数的原理是通过遍历链表,逐一比较每个节点的姓名属性,找到对应姓名的员工信息。
相关问题
int Linklist::delete_name(string name) //按值删除 { worker* p = head; int count = 0; while (p->next != NULL) { if (p->next->m_name == name) { worker* ptr = p->next; p->next = ptr->next; free(ptr); count++; } else { p = p->next; } } if (count == 0) { cout << "未发现该名员工!" << endl; return -1; } }解释这段代码的原理
这段代码是一个链表中按照员工姓名删除节点的函数。它首先定义了一个指向链表头节点的指针p,然后通过循环遍历链表,查找与给定姓名相同的节点。如果找到了这样的节点,它会用一个指针ptr指向该节点,然后将该节点从链表中删除,并释放该节点的内存空间。最后,它会返回删除的节点数。如果没有找到与给定姓名相同的节点,它会输出一条提示信息并返回-1。
void Linklist::update(worker* data) //更新节点信息 { worker* p = head; worker* ptr; while (p->next != NULL) { if (p->next->m_name == data->m_name) { ptr = p->next; if (p->next->next == NULL) { p->next = data; } else { data->next = p->next->next; p->next = data; } delete ptr; break; } else { p = p->next; } }
这是一个关于链表更新节点信息的代码,我可以回答这个问题。这段代码的作用是在链表中查找名字为data->m_name的节点,如果找到了,则用data节点替换掉原来的节点。如果没有找到,则不做任何操作。具体实现是通过遍历链表,找到目标节点后,将目标节点的前一个节点指向data节点,将data节点指向目标节点的后一个节点,最后删除原来的目标节点。
阅读全文