存储单一类型数据的双向链表,需要提供数据操作集 (InfoOfData)
DList_S (Double List Single Data) 是一种双向链表数据结构,只能存储单一类型的数据。所有数据都需要提供对应的 InfoOfData 操作集指针,用于执行复制、比较、释放等操作。
// 链表节点
typedef struct Node_S_inDList {
struct Node_S_inDList* prev; // 前驱节点
struct Node_S_inDList* next; // 后继节点
Data_S val; // 数据
} Node_S_inDList;
// DList_S 链表
typedef struct {
Node_S_inDList* head; // 头节点
Node_S_inDList* tail; // 尾节点
InfoOfData* valInfo; // 数据操作集
int size; // 链表长度
} DList_S;
#include "base.h"
#include "List/DList/Single_Data/dlist_sdata.h"
#include "Oper/Int_Info/int_info.h" // 使用预定义整数操作集
int main() {
// 1. 初始化链表
DList_S list;
initSDList(&list, &Info_Int);
// 2. 创建数据并插入
Data_S data1 = Data_S_OWN(123, NULL);
insertSDataAtEndInSDList(&list, data1);
Data_S data2 = Data_S_OWN(456, NULL);
insertSDataAtEndInSDList(&list, data2);
// 3. 打印链表
printSDList(&list);
// 4. 释放链表
freeSDList(&list);
return 0;
}
初始化 DList_S
plist - DList_S 类型的指针valInfo - InfoOfData 类型数据指针释放 SData (Data_S 类型) 的内容
plist - DList_S 的指针inputData - Data_S 类型指针清除 DList_S 链表
plist - DList_S 链表指针在 DList_S 链表的尾部插入数据 Data_S
plist - DList_S 链表指针inputData - 传入的 Data_S 类型数据在 DList_S 链表头部插入数据 Data_S
plist - DList_S 链表指针inputData - 传入的 Data_S 类型数据在 DList_S 链表 Pos 位置插入数据 Data_S
plist - DList_S 链表指针inputData - 传入的 Data_S 类型数据pos - 位置的范围在 [0, list.size],范围的两端分别代表头插和尾插删除 DList_S 链表头节点
plist - DList_S 链表指针删除 DList_S 链表尾节点
plist - DList_S 链表指针通过 SData (Data_S 类型) 数据来删除 DList_S 中的节点
plist - DList_S 链表指针inputData - 传入的 Data_S 类型数据通过位置删除 DList_S 的节点
plist - DList_S 链表指针pos - 要删除的位置(从 0 开始)通过位置 Pos 返回 SData 的指针 (Data_S 类型),可直接修改内部的 void* data 和 void* content 内容
plist - List 类型指针pos - 位置(从 0 开始)通过 Pos 位置返回 Data_S,注意这里 Data_S 中的 void* data 和 void* content 都是复制的,使用完后记得释放
plist - DList_S 类型指针pos - 位置(从 0 开始)通过 Data_S 类型数据返回 SData 的指针 (Data_S 类型),可直接修改内部的 void* data 和 void* content 内容
plist - DList_S 类型指针inputData - 传入的 Data_S 类型数据判断 Data_S 数据是否在 DList_S 里面
plist - List_M 类型指针inputData - 传入的 Data_S 类型数据反转 DList_S 链表
plist - DList_S 链表指针打印 List_M 链表中的 Data_S 数据(一般为查找类函数返回值)
plist - DList_S 链表指针inputData - Data_S 类型数据打印 DList_S 链表数据
plist - DList_S 链表指针#include <stdio.h>
#include "base.h"
#include "List/DList/Single_Data/dlist_sdata.h"
#include "Oper/Int_Info/int_info.h"
int main() {
// 初始化链表
DList_S list;
initSDList(&list, &Info_Int);
// 插入数据
printf("=== 插入数据 ===\n");
insertSDataAtEndInSDList(&list, Data_S_OWN(100, NULL));
insertSDataAtEndInSDList(&list, Data_S_OWN(200, NULL));
insertSDataAtStartInSDList(&list, Data_S_OWN(50, NULL));
insertSDataAtPosInSDList(&list, Data_S_OWN(150, NULL), 2);
printSDList(&list);
// 查找数据
printf("\n=== 查找数据 ===\n");
Data_S found = getPtrSDataByPosInSDList(&list, 2);
if (!found.isEmpty) {
printf("位置 2 的数据: %d\n", *(int*)found.data);
}
// 判断是否存在
printf("\n是否存在 200: %s\n", hasSDataInSDList(&list, Data_S_OWN(200, NULL)) ? "是" : "否");
// 删除数据
printf("\n=== 删除数据 ===\n");
delNodeByPosInSDList(&list, 1);
printSDList(&list);
// 反转链表
printf("\n=== 反转链表 ===\n");
reverseSDList(&list);
printSDList(&list);
// 释放链表
freeSDList(&list);
return 0;
}