这里是双链表的结构,插入和删除(其实我觉得怪怪的,带表头emmm)
和单链表相比,双链表多了一个前驱指针域,可以双向的历遍查找,省去了不少历遍的步数,适合用于双向的插入查找。
初学,不知道有什么用处,于是随便bb了一堆。
#include<stdio.h>
#include<stdlib.h>
typedef struct DSLNode
{
int Element;
DSLNode *LNode;
DSLNode *RNode;
};
typedef struct DoubleList
{
DSLNode *First;
int n;
};
bool DSLInit(DoubleList *L)
{
L->First=(DSLNode*)malloc(sizeof(DSLNode));
L->First->LNode=NULL;
L->First->RNode=NULL;
L->n=0;
return true;
}
bool DSLInsert(DoubleList *L,int Postion,int Element)
{
int i;
DSLNode *p,*q;
p=L->First;
for(i=0;i<=Postion;i++)
{
p=p->RNode;
}
q=(DSLNode*)malloc(sizeof(DSLNode));
q->Element=Element;
q->RNode=p->RNode;
q->LNode=p;
p->RNode=q;
L->n++;
return true;
}
bool DSLDelete(DoubleList *L,int Postion)
{
int i;
DSLNode *p,*q;
p=L->First;
for(i=0;i<=Postion;i++)
{
p=p->RNode;
}
q=p->RNode;
p->RNode=q->RNode;
q->RNode->LNode=p;
free(q);
L->n--;
return true;
}