RubbishBin/josephus/src/LinkedList.cpp

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;
}
}