133 lines
2.3 KiB
C++
133 lines
2.3 KiB
C++
//
|
|
// Created by ricardo on 9/26/22.
|
|
//
|
|
#include "LinkedList.h"
|
|
|
|
bool init_linked_list(node_p& head)
|
|
{
|
|
head = (node_p) malloc(sizeof (node_t));
|
|
|
|
if (head == nullptr)
|
|
{
|
|
// 空间分配失败
|
|
return false;
|
|
}
|
|
// 由于是创建循环链表 头节点的下一个节点就是头节点
|
|
head->next = head;
|
|
return true;
|
|
}
|
|
|
|
void destroy_linked_list(node_p& head)
|
|
{
|
|
node_p node = head->next;
|
|
|
|
// 先循环处理所有不是头节点的节点
|
|
while (node != head)
|
|
{
|
|
node_p temp = node;
|
|
node = node->next;
|
|
free(temp);
|
|
}
|
|
|
|
free(head);
|
|
head = nullptr;
|
|
}
|
|
|
|
bool create_node(node_p& node, int id, int age, int gender, char* name)
|
|
{
|
|
node = (node_p) malloc(sizeof(node_t));
|
|
|
|
if (node == nullptr)
|
|
{
|
|
// 分配空间失败
|
|
return false;
|
|
}
|
|
|
|
node->ID = id;
|
|
node->Age = age;
|
|
node->Gender = gender;
|
|
strcpy(node->Name, name);
|
|
|
|
return true;
|
|
}
|
|
|
|
void append_node(const node_p& head, node_p new_node)
|
|
{
|
|
node_p node = head->next;
|
|
|
|
// 找到头节点前的一个节点
|
|
while (node->next != head)
|
|
{
|
|
node = node->next;
|
|
}
|
|
|
|
node->next = new_node;
|
|
new_node->next = head;
|
|
}
|
|
|
|
bool delete_node(const node_p& head, node_p target_node)
|
|
{
|
|
if (head == target_node)
|
|
{
|
|
// 删除头节点时不可行的
|
|
return false;
|
|
}
|
|
|
|
node_p node = head;
|
|
|
|
while (node->next != target_node)
|
|
{
|
|
if (node->next == head)
|
|
{
|
|
// 循环完了都没找见
|
|
// 说明查无此节点
|
|
return false;
|
|
}
|
|
|
|
node = node->next;
|
|
}
|
|
|
|
node->next = target_node->next;
|
|
free(target_node);
|
|
return true;
|
|
}
|
|
|
|
void print_node(const node_p& node)
|
|
{
|
|
if (node == nullptr)
|
|
{
|
|
// 指定节点为空
|
|
return;
|
|
}
|
|
|
|
printf("ID:%d|", node->ID);
|
|
printf("Name:%s|", node->Name);
|
|
printf("Age:%d|", node->Age);
|
|
if (node->Gender == MALE)
|
|
{
|
|
printf("Gender:Male\n");
|
|
}
|
|
else
|
|
{
|
|
printf("Gender:Female\n");
|
|
}
|
|
}
|
|
|
|
void print_linked_list(const node_p& head)
|
|
{
|
|
if (head == nullptr)
|
|
{
|
|
// 头节点为空
|
|
return;
|
|
}
|
|
|
|
node_p node = head->next;
|
|
|
|
while (node != head)
|
|
{
|
|
print_node(node);
|
|
node = node->next;
|
|
}
|
|
}
|
|
|