1. 双向链表中插入元素
Status ListInsert_DuL(DuLinkList&L,int i,ElemType e){
DuLNode *p,*s;int j=0;//定义两个指针 一个指向链表中的位置 一个指向要插入的元素
p=L;//p指向第0个位置
while(p&&j<i-1) {//定位到第i-1个位置
j++;
p=p->next;
}
if(!p||i<1) return ERROR;
s=(DuLinkList)malloc(sizeof(DuLNode));
if(!s) exit(OVERFLOW);
s->data=e;//先搞定s
s->prior=p;
s->next=p->next;
p>next->prior=s;
p->next=s;
return O
2. 双向链表中删除元素
Status ListDelete_DuL(DuLinkList&L,int i,ElemType &e){
DuLNode*p=L;//用一个指针
int j=0;
while(p&&j<i){
p=p->next;
j++;
}//p指向第i个位置
if(i<1||!p){//判断i不合法或者第i个元素不存在
return ERROR;
}
e=p->data;//e带回删除的元素
p->next->prior=p->prior;
p->prior->next=p->next;
free(p);
p=NULL;//防止内存泄漏
return OK;
}
所有代码
#include<isotream>
//双向循环列表
using namespace std;
typedef int ElemType;
typedef int Status;
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
//双向链表中插入元素
Status ListInsert_DuL(DuLinkList&L,int i,ElemType e){
DuLNode *p,*s;int j=0;//定义两个指针 一个指向链表中的位置 一个指向要插入的元素
p=L;//p指向第0个位置
while(p&&j<i-1) {//定位到第i-1个位置
j++;
p=p->next;
}
if(!p||i<1) return ERROR;
s=(DuLinkList)malloc(sizeof(DuLNode));
if(!s) exit(OVERFLOW);
s->data=e;//先搞定s
s->prior=p;
s->next=p->next;
p>next->prior=s;
p->next=s;
return OK;
}
//双向链表中删除元素
Status ListDelete_DuL(DuLinkList&L,int i,ElemType &e){
DuLNode*p=L;//用一个指针
int j=0;
while(p&&j<i){
p=p->next;
j++;
}//p指向第i个位置
if(i<1||!p){//判断i不合法或者第i个元素不存在
return ERROR;
}
e=p->data;//e带回删除的元素
p->next->prior=p->prior;
p->prior->next=p->next;
free(p);
p=NULL;//防止内存泄漏
return OK;
}
int main(){
}