C_DS_AIgo/linked_list.c
2025-03-27 09:08:11 +08:00

105 lines
1.5 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"
// 初始赋值
node* init_node(elem_type value)
{
node* new_node = (node*)malloc(sizeof(node));
if (new_node == NULL)
{
printf("error: malloc failed\n");
return NULL;
}
new_node->value = value;
new_node->next = NULL;
return new_node;
}
// 删除下一个节点
void delete_node(node* n)
{
if (n->next != NULL) {
node* temp = n->next;
n->next = n->next->next;
free(temp);
}
}
// 替换节点值
void replace_node(node* n, elem_type value)
{
n->value = value;
}
// 插入节点
void insert_node(node* head, elem_type value)
{
node* new_node = init_node(value);
new_node->next = head->next->next;
head->next = new_node;
}
// 访问节点
int get_node(node* n)
{
return n->value;
}
// 查找
address_node *find_node(node* head, elem_type value)
{
address_node* n = (address_node*)malloc(sizeof(address_node));
if (n == NULL) {
printf("内存分配失败\n");
return NULL;
}
n->n = 0;
n->p = head;
while (head != NULL)
{
if (head->value == value)
return n;
n->n += 1;
head = head->next;
}
printf("无法找到节点\n");
free(n);
return NULL;
}
// 打印链表
void print_node_list(node* head)
{
while (head->next != NULL)
{
head = head->next;
printf("%d ", head->value);
}
}
// 获得链表长度
int get_node_list(node* head)
{
int i = 0;
while (head->next != NULL)
{
head = head->next;
i++;
}
printf("链表长度为%d\n", i);
return i;
}
// 获得元素
elem_type get_node_value(node* head,int pos,elem_type value)
{
int i = 1;
while (i <= pos)
{
head = head->next;
i++;
}
return head->value;
}