您的位置:首页 > 其它

双向循环链表的建立,插入,删除(带头节点)

2018-01-03 00:28 731 查看
#include<iostream>
#include<cstdio>
#include<malloc.h>

#define OVERFLOW -2
#define ERROR -1

typedef struct DuLNode{
int data;
struct DuLNode *prior,*next;
}DuLNode,*DuLinkList;

void CreateList_DuL(DuLinkList &L,int n){//头插入法建立双向循环链表
int data;
DuLNode *rear,*p;
rear=L=(DuLinkList)malloc(sizeof(DuLNode));
L->next=NULL;
for(int i=0;i<n;i++){
p=(DuLinkList)malloc(sizeof(DuLNode));
scanf("%d",&data);
p->data=data;
p->next=rear->next;
rear->next=p;
p->prior=rear;
rear=p;
}
rear->prior=L;
L->prior=rear;
}

void ListInsert_Dul(DuLinkList &L,int i,int e){
//在双向链表第i个位置插入元素e
DuLNode *p,*q;

p=L;
int j=0,data;
while(p&&j<i-1){
p=p->next;j++;
}
if(!p||j>i-1)return;
q=(DuLinkList)malloc(sizeof(DuLNode));
q->data=e;
q->next=p->next;
p->next->prior=q;
p->next=q;
q->prior=p;
}

void ListDelete_Dul(DuLinkList &L,int i){
DuLNode *q,*p;
p=L;
int j=0;
while(p&&j<i){
p=p->next;j++;
}
if(!p||j>i)return;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
}
int main(){
DuLinkList T;
int n;
printf("输入个数:\n");
scanf("%d",&n);
printf("输入个元素:\n");
CreateList_DuL(T,n);
printf("插入位置与值\n");
int pos,val;
scanf("%d%d",&pos,&val);
ListInsert_Dul(T,pos,val);//随便想第三个位置插入4
printf("打印:\n");
DuLNode *p;
p=T->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n删除位置\n");
scanf("%d",&pos);
ListDelete_Dul(T,pos);
printf("打印:\n");
p=T->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐