数据结构——双向链表的插入和删除操作
程序员文章站
2022-03-01 23:20:39
...
/*
双向链表的插入和删除操作
2018.04.14
*/
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct BOOK{
char no[20];
char name[20];
double price;
};
typedef struct DLNode{
BOOK data; //数据域
struct DLNode *prior;//直接前驱
struct DLNode *next;//直接后继
}DLNode,*DLinkList;
//双向链表查找
DLinkList GetElem_DuL(DLinkList L,int i){
DLinkList p;
p=L->next;
int j=1;
while(p!=NULL&&j<i){
++j;
p=p->next;
}
if(!p||j>i)
p=NULL;
return p;
}
//双向链表的插入
Status ListInsert_DuL(DLinkList &L,int i,BOOK e){
//在带头结点的双向链表L中的第i个位置前插入元素e
DLinkList p;
if(!(p=GetElem_DuL(L,i)))
return ERROR;
DLinkList s=new DLNode;
s->data=e;
s->prior=p->prior;
s->next=p->prior->next;
p->prior->next=s;
s->next=p;
return OK;
}
//双向链表的删除
Status ListDelete_DuL(DLinkList &L,int i){
//删除带头结点的双向链表L中的第i个元素
DLinkList p;
if(!(p=GetElem_DuL(L,i)))
return ERROR;
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
return OK;
}