双向链表
一、定义
双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向前驱。
二、代码(不含头结点)
#ifndef __DULINKEDLIST_H
#define __DULINKEDLIST_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 30
#define OK 1
#define ERROR 0
typedef int states;
/** 结点数据域结构 */
typedef struct {
int id;
char name[MAX_SIZE];
}ElementType;
/** 双向链表结点结构 */
typedef struct dulNode{
ElementType data;
struct dulNode *prevptr; //指向前个结点
struct dulNode *nextptr; //指向后个结点
}DulNode;
/** 双向链表表头结构 */
typedef struct {
DulNode *headptr;
int length;
}DuLinkedList;
/** 双向链表初始化 */
states InitDuLinkedList(DuLinkedList *ptrl);
/** 双向链表插入元素(按位置下标插入) */
states InsertDuLinkedList(DuLinkedList *ptrl,int pos,ElementType x);
/** 双向链表删除元素(按照位置下标删除) */
states DeleteDuLinkedList(DuLinkedList *ptrl,int pos,ElementType *x);
/** 双向链表删除元素(按照结点地址删除) */
states DeleteElem(DuLinkedList *ptrl,DulNode *nodeptr);
/** 创建双向链表(头插法:外部建立结点) */
states CreateDuLinkedList_H(DuLinkedList *ptrl,DulNode *nodeptr,ElementType x);
/** 创建双向链表(尾插法) */
void CreateDuLinkedList_T(DuLinkedList *ptrl);
/** 获取双链表中的结点个数 */
int GetDuLinkListLength(DuLinkedList *ptrl);
/** 清空双向链表 */
states ClearDuLinkedList(DuLinkedList *ptrl);
/** 打印双向链表中的元素 */
void PrintfDuLinkedList(DuLinkedList *ptrl);
#endif /* __DULINKEDLIST_H */
#include "dulinkedlist.h"
/** 双向链表初始化 */
states InitDuLinkedList(DuLinkedList *pt