#include <stdio.h>
#include <stdlib.h>
#define Error 0
#define Ok 1
typedef int Status;
typedef int ElemType;
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinklist; //双向链表的结构体 两个指针,分别指向前一个和后一个节点
DuLinklist Ini_DuLinklist() //初始化双向链表
{
DuLinklist L;
L=(DuLNode*)malloc(sizeof(DuLinklist));
if(!L)
{
printf("出错了啊"); exit(1);
}
return L;
}
DuLinklist Create_DuLinklist(DuLinklist L) //创建双向链表
{
DuLinklist p,q;
p=(DuLNode *)malloc(sizeof(DuLinklist));
p=L;
printf("请输入您的链表,输入0时结束");
q=(DuLNode*)malloc(sizeof(DuLinklist));
scanf("%d",&q->data);
while((q->data!=NULL)||q->data!=0)
{
p->next=q;
q->prior=p;
q->next=L;
p=p->next;L->prior=p;
q=(DuLNode*)malloc(sizeof(DuLinklist));
scanf("%d",&q->data);
}
return L;
}
Status Insert_DuLinklist(DuLinklist L,int i,ElemType e ) //向双向链表中插入一个节点
{
DuLinklist p,s;
int j;j=0;
p=L;
s=(DuLNode*)malloc(sizeof(DuLinklist));
if(!s) return Error;
while (p&&j<i)
{
p=p->next;
j++;
}
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return Ok;
}
Status Delete_DuLinklist (DuLinklist L,int i,ElemType *e) //双向链表中删除一个节点
{
DuLinklist p,s;
int j;j=0;
p=L;
while (p&&j<i)
{
p=p->next;
j++;
}
*e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
return Ok;
}
Status GetElem(DuLinklist L,int i,ElemType *e) //获取双向链表中第i个元素
{
DuLinklist p;
int j;j=0;
p=L;
while (p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i) return Error;
*e=p->data;
return *e;
}
void print(DuLinklist L)
{
DuLinklist p;
p=L->next;
printf("您的双向链表为");
while(p!=L)
{
printf("%d",p->data);
p=p->next;
}
}
void main ()
{
DuLinklist head;int i,e,j,k,a,t;
head=Ini_DuLinklist();
Create_DuLinklist(head);
print(head);
printf("请输入想要取得的数的为第几个元素啊");
scanf("%d",&i);
GetElem(head,i,&e);
printf("第%d个元素为%d",i,e);
printf("请输入您要在第几个位置之前插入什么元素");
scanf("%d,%d",&j,&k);
Insert_DuLinklist(head,j,k);
print(head);
printf("请输入您要删除的位置");
scanf("%d",&a);
Delete_DuLinklist(head,a,&t);
print(head);
getchar();
getchar();
}
双向链表的插入操作是需要进行四个指针的修改
双向链表的删除操作是需要进行两个指针的修改
双向链表的结构体
双向链表删除节点 修改两个指针
双向链表插入节点 修改四个指针 有顺序的