双向链表的创建,输出,插入数据和删除数据
#include <stdio.h>
#include <stdlib.h>
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。typedef struct aa{
int data;
struct aa *rlink;
struct aa *llink;
}DLink;
DLink * createLink(DLink *head){//头节点
DLink *p,*q;
int n;
head=p=(DLink *)malloc(sizeof(DLink));
head->rlink=NULL;
head->llink=NULL;
scanf("%d",&n);
while(n!=-1){//以输入-1作为输入数据的结束
q=(DLink *)malloc(sizeof(DLink));
q->llink=NULL;
p->llink=q;
q->rlink=p;
p=p->llink;
p->data=n;
scanf("%d",&n);
}
return head;
}
void printLink(DLink *p){
do{
p=p->llink;
printf("%d ",p->data);
}while(p->llink!=NULL);
}
DLink * insertdate(DLink *head,int i,int n){
int j;
DLink *p=head;
DLink *q;
DLink *s;
s=(DLink *)malloc(sizeof(DLink));
s->data=n;
if(p->llink==NULL){
p->llink=s;
s->rlink=p;
return head;
}
q=p->llink;
for(j=1;j<i&&q!=NULL;j++){
p=p->llink;
q=p->llink;
}
if(q==NULL)
{
p->llink=s;
s->rlink=q;
}
else{
s->llink=q;
q->rlink=s;
p->llink=s;
s->rlink=p;
}
return head;
}
DLink * deleteLink(DLink *head,int j){
int i=1;
DLink *p=head,*q=head->llink;
while(i<j&&q!=NULL){
p=p->llink;
q=q->llink;
i++;
}
if(i==j){
p->llink=q->llink;
q->llink->rlink=p;
}
return head;
}
int main(){
int i,j,n;//i是要插入的序号,n是要插入的数据,j是要删除的序号
DLink *L;
printf("请输入双向链表的数据,输入-1结束结束输入数据:");
L=createLink(L);//创建链表
printLink(L);//输出链表
printf("请输入要插入的序号和数据(序号要大于0):");
scanf("%d %d",&i,&n);
L=insertdate(L,i,n);//插入数据
printLink(L);
printf("请输入请输入要删除数据的序号(序号要大于0且本序号有对应的数据):");
scanf("%d",&j);
L=deleteLink(L,j);//删除链表
printLink(L);
}
