双向链表基本操作:
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct DuLNode
{
ElemType data;
struct DuLNode* prior;
struct DuLNode* next;
}DuLNode,*DuLinkList;
Status InitList(DuLinkList& L)//初始化双向链表
{
L = new DuLNode;
if (!L) exit(-1);
L->prior = L;
L->next = L;
return 0;
}
DuLinkList GetElem_DuL(DuLinkList L, int i)//按位置查找双向链表中的元素
{
if (i < 1) return ERROR;
DuLinkList p;
p = new DuLNode;
p = L->next;
for (int j = 1; j < i; j++)
{
p = p->next;
}
return p;
}
Status ListInsert_DuL(DuLinkList& L, int i, ElemType e)//第i个元素前插入
{
DuLinkList p;
if (!(p = GetElem_DuL(L, i)))
{
return ERROR;
}
DuLinkList s;
s = new DuLNode;
s->data = e;
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
return OK;
}
Status List