1.初始定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct DualNode{
ElemType data;
struct DualNode *prior; //前一指针
struct DualNode *next; //后一指针
}DualNode,*DuLinkList;
2.初始化循环链表
Status CreateDualNode(DuLinkList &L){ //传递头结点
L = (DuLinkList)malloc(sizeof(DualNode));
if(L == NULL){ //分配空间失败
cout<<"ERROR";
return ERROR;
}
L->prior = NULL;
L->next = NULL;
L->data = 0; //存储数据个数
return OK;
}
3.输入指定长度数据
Status CreateList(DuLinkList &L,int length){
if(length<=0)
return ERROR;
CreateDualNode(L); //初始化头结点
DuLinkList p = L;
for(int i = 0;i<length;i++){//存放i个数据
DuLinkList body = (DuLinkList)malloc(sizeof(DualNode));
scanf("%d",&body->data); //输入数据
L->data++; //长度+1
p->next = body; //设置指针连接新元素
body->prior = p;
body->next = NULL;
p = p->next;
}
return OK;
}
4.插入元素操作
Status ListInsert_Dul(DuLinkList &L,int i,ElemType e){ //在第i个元素之前插入
if(i<=0||i>=L->data+1){ //i值不合法
return ERROR;
}
else if(i==L->data+1){//在末位插入需要特殊处理
DuLinkList S;
if(!(S = (DuLinkList)malloc(sizeof(DualNode)))){
return ERROR;
}
S->data = e;
DuLinkList p = L;
while(p->next){ //将p移动到最后
p = p->next;
}
S->next = NULL;
S->prior = p; //进行连接
p->next = S;
L->data++;
return OK;
}
else{
DuLinkList S;
if(!(S = (DuLinkList)malloc(sizeof(DualNode)))){
return ERROR;
}
S->data = e;
DuLinkList p = L;
for(int j = 0;j<i;j++){ //将p移动到指定第i元素位置
p = p->next;
}
S->prior = p->prior; //连接
p->prior->next = S;
S->next = p;
p->prior = S;
L->data++;
return OK;
}
}
5.删除元素操作
Status ListDelete_Dul(DuLinkList &L,int i,ElemType &e){ //删除第i位置的元素 用e返回其值
DuLinkList p = L;
int j = 0;
if(i>=1&&i<L->data){ //i值合法
for(j = 0;j<i;j++){
p = p->next; //移动到指定元素
}
e = p->data;
p->prior->next = p->next; //进行前一元素和后一元素的连接
p->next->prior = p->prior;
free(p);
L->data--; //长度减1
return OK;
}
else if(i==L->data){ //删除最后一个元素单独处理
for(j = 0;j<i;j++){
p = p->next;
}
e = p->data;
p->prior->next = NULL; //p前一元素的next为NULL
free(p);
L->data--; //长度减1
return OK;
}
}
6.遍历打印元素
Status showDulLinkList(DuLinkList L){
DuLinkList p = L->next;
while(p){
cout<<p->data<<" ";
p = p->next;
}
return OK;
}
——————END——————
作者注:
记录学习,分享经验。
有兴趣可以关注博主,以后还会持续更新内容哦~