1. **初始化链表:**
- 通过 `DList_Init` 函数初始化双链表,不再创建头结点。
2. **判断双链表是否为空(不带头节点):**
- 通过 `DList_Empty` 函数判断链表是否为空,检查链表头指针是否为NULL。
3. **获取链表有效数据节点个数:**
- 使用 `DList_Length` 函数遍历链表,计算有效节点的个数,即链表的长度。
4. **创建双链表(头插法,不带头节点):**
- 使用 `DList_Create` 函数,通过输入一系列整数,采用头插法创建双链表,结果为倒序。
5. **按位序插入:**
- 使用 `DList_Insert` 函数,在指定位序处插入元素,支持在表头和表尾插入。
6. **通过值获取结点和位序:**
- 使用 `DList_Get_Elem` 函数,通过给定的值在链表中查找结点,同时返回结点所在的位序。
7. **按位序删除:**
- 使用 `DList_Del` 函数,删除指定位序的结点,支持删除表头和表尾。
8. **打印链表所有值(正序和倒序):**
- 使用 `DList_Show` 和 `DList_Show_Back` 函数,分别从头到尾和从尾到头打印链表的所有结点的值。
9. **主函数:**
- 主函数演示了上述功能的调用,包括链表的初始化、创建、插入、删除、查找等基本操作。
#include <stdio.h>
#include<stdlib.h>
using namespace std;
// 定义双链表结构
typedef struct DNode {
int data; // 数据
struct DNode *prior, *next; // 前驱和后继指针
} DNod