/*
作用:双链表及其各种方法的实现(C语言)
日期:2015年5月
*/
//DList.h
//结构体定义及函数声明
#ifndef DLIST_H
#define DLIST_H
#include
#include
using namespace std;
#define ElemType int
typedef struct Node
{
ElemType data;
struct Node *prio;
struct Node *next;
}Node,*PNode;
typedef struct List
{
PNode head;
PNode tail;
int size;
}List,*PList;
void InitList(PList list); //初始链表
void push_back(PList list,ElemType x); //尾插
void push_front(PList list,ElemType x); //头插
void show_DList(PList list); //显示链表
void pop_back(PList list); //删除最后面一个节点
void pop_front(PList list); //删除最前面一个节点
void insert_val(PList list,ElemType x); //链表有序的前提下,插入一个节点到适当位置
PNode find(PList list,ElemType key); //给一个值,看这个节点是否找到或存在
void delete_val(PList list,ElemType key); //删除给定的值
void modify(PList list,ElemType key1,ElemType key2); //把原有的key1修改成key2
void clear(PList list); //清空链表
void destroy(PList list); //摧毁链表
void sort(PList list); //把无序的链表排成有序
void reserve(PList list); //把链表转置
int length(PList list); //求链表的长度
ElemType next(PList list,ElemType x); // 求给定值的后继值
ElemType prio(PList list,ElemType x); // 求给定值的前驱值
#endif
//DList.cpp
//各种函数的实现方法
#include"DList.h"
void InitList(PList list)
{
Node *s = (Node *)malloc(sizeof(Node));
assert(s != NULL);
s->prio = NULL;
s->next = NULL;
list->head = list->tail = s;
list->size = 0;
}
void push_back(PList list,ElemType x)
{
PNode s = (PNode)malloc(sizeof(Node));
assert(NULL != s);
s->data = x;
s->next = NULL;
list->tail->next = s;
s->prio = list->tail;
list->tail = s;
list->size++;
}
void push_front(PLi