双向链表(以带头节点的双向链表)的结构如下:
由数据域,指向后继的指针,以及纸箱前驱的指针构成。
1. 该双向链表的定义如下:
typedef struct DNode
{
int data;//数据域
struct DNode *next;//指向后继
struct DNode *prio;//指向前驱
}DNode ,*DList;
2. 双向链表的初始化
void InitList(DList plist)
{
plist->next = NULL;
plist->prio = NULL;
}
3. 利用头插法插入
bool Insert_Head(DList plist,int val)
{
DNode *p = (DNode *)malloc(sizeof(DNode));
p->data = val;
p->next = plist->next;//1
plist->next = p;//2
p->prio = plist;
if(p->next != NULL)//特殊情况,p是第一次插入的节点
{
p->next->prio = p;
}
return true;
}
4. 利用尾插法插入
bool Insert_Tail(DList plist,int val)
{
DNode *p = (DNode *)malloc(sizeof(DNode));
p->data = v