#include
<stdio
.h
>
#include
<stdlib
.h
>
#define
FLAG -1
typedef struct Node
{
struct Node
* prior
;
int data
;
struct Node
* next
;
}LNode
,*LinkList
;
void CreateDoubleLinkedList(LinkList
L);
void CreateDoubleCircularLinkedList(LinkList
L);
void ShowDoubleLinkedList(LinkList
L);
void InsertDoubleLinkedList(LinkList
L,int num
,int local
);
void DeleteDoubleLinkedList(LinkList
L,int local
);
LinkList
GetLinkList(LinkList
L,int local
);
void CreateDoubleCircularLinkedList(L);
void ShowDoubleCircularLinkedList(LinkList
L);
void InsertDoubleCircularLinkedList(LinkList
L,int num
,int local
);
void DeleteDoubleCircularLinkedList(LinkList
L,int local
);
void main()
{
LinkList
L = (LinkList
)malloc(sizeof(LNode
));
printf("创建双向循环链表:\n");
CreateDoubleCircularLinkedList(L);
printf("遍历双向链表:\n");
ShowDoubleCircularLinkedList(L);
printf("插入元素后的链表:\n");
InsertDoubleCircularLinkedList(L,100,3);
ShowDoubleCircularLinkedList(L);
printf("删除元素后的链表:\n");
DeleteDoubleCircularLinkedList(L,3);
ShowDoubleCircularLinkedList(L);
}
void CreateDoubleLinkedList(LinkList
L)
{
LinkList r
,s
;
int x
= 0;
r
= L;
scanf("%d",&x
);
while(x
!= FLAG)
{
s
= (LinkList
)malloc(sizeof(LNode
));
s
->data
= x
;
r
->next
= s
;
s
->prior
= r
;
r
= r
->next
;
scanf("%d",&x
);
}
r
->next
= NULL;
}
void ShowDoubleLinkedList(LinkList
L)
{
LinkList p
= L->next
;
printf("%d",p
->data
);
p
= p
->next
;
while(p
!= NULL)
{
printf("->%d",p
->data
);
p
= p
->next
;
}
printf("\n");
}
void InsertDoubleLinkedList(LinkList
L,int num
,int local
)
{
LinkList p
;
int i
;
i
= local
- 1;
p
= GetLinkList(L,local
- 1);
if(p
== NULL)
{
printf("插入位置不合法!\n");
exit(1);
}
else
{
LinkList s
= (LinkList
)malloc(sizeof(LNode
));
s
->data
= num
;
s
->next
= p
->next
;
if(p
->next
)p
->next
->prior
= s
;
p
->next
= s
;
s
->prior
= p
;
}
}
void DeleteDoubleLinkedList(LinkList
L,int local
)
{
LinkList p
,q
;
p
= GetLinkList(L,local
- 1);
if(p
== NULL)
{
printf("删除位置不合法!");
exit(1);
}
else
{
if(p
->next
== NULL)
{
printf("删除位置不合法!");
exit(1);
}
else
{
q
= p
->next
;
p
->next
= q
->next
;
if(q
->next
)
q
->next
->prior
= p
;
free(q
);
}
}
}
LinkList
GetLinkList(LinkList
L,int local
)
{
LinkList p
= L;
int j
= 0;
while(p
!= NULL && j
< local
)
{
p
= p
->next
;
j
++;
}
return p
;
}
void CreateDoubleCircularLinkedList(LinkList
L)
{
LinkList r
,s
;
int x
= 0;
r
= L;
scanf("%d",&x
);
while(x
!= FLAG)
{
s
= (LinkList
)malloc(sizeof(LNode
));
s
->data
= x
;
r
->next
= s
;
s
->prior
= r
;
r
= r
->next
;
scanf("%d",&x
);
}
r
->next
= L;
L->prior
= r
;
}
void ShowDoubleCircularLinkedList(LinkList
L)
{
LinkList p
= L->next
;
printf("%d",p
->data
);
p
= p
->next
;
while(p
!= L)
{
printf("->%d",p
->data
);
p
= p
->next
;
}
printf("\n");
}
void InsertDoubleCircularLinkedList(LinkList
L,int num
,int local
)
{
LinkList p
;
int i
;
i
= local
- 1;
p
= GetLinkList(L,local
- 1);
if(p
== L)
{
printf("插入位置不合法!\n");
exit(1);
}
else
{
LinkList s
= (LinkList
)malloc(sizeof(LNode
));
s
->data
= num
;
s
->next
= p
->next
;
p
->next
= s
;
s
->prior
= p
;
}
}
void DeleteDoubleCircularLinkedList(LinkList
L,int local
)
{
LinkList p
,q
;
p
= GetLinkList(L,local
- 1);
if(p
== L)
{
printf("删除位置不合法!");
exit(1);
}
else
{
if(p
->next
== L)
{
printf("删除位置不合法!");
exit(1);
}
else
{
q
= p
->next
;
p
->next
= q
->next
;
free(q
);
}
}
}
转载请注明原文地址: https://yun.8miu.com/read-110135.html