//
//
// 双向循环链表
//
///
/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
// 结点定义
typedef struct Node
{
int elem ;
struct Node * next ;
struct Node * prior ;
} Node ;
//双向循环链表定义
typedef struct DoubleCycleLinkList
{
Node * head ;
} DoubleCycleLinkList ;
// 初始化
void Init( DoubleCycleLinkList * L )
{
L->head = (Node*)malloc(sizeof(Node)) ;
if( !L->head )
{
printf("申请内存失败!") ;
exit(0) ;
}
L->head->next = NULL ;
}
// 插入
void Insert( DoubleCycleLinkList * L , int elem )
{
Node * node = (Node*)malloc(sizeof(Node)) ;
if( !node )
{
printf("申请内存失败!") ;
exit(0) ;
}
node->elem = elem ;
if( L->head->next == NULL ) // 双向循环链表为空
{
L->head->next = node ;
node->prior = L->head->next ;
node->next = L->head->next ;
}
else
{
Node * p = L->head->next ;
while( p->next != L->head->next )
{
p = p->next ;
}
p->next = node ;
node->next = L->head->next ;
node->prior = p ;
L->head->prior = node ;
}
}
// 删除
void Delete( DoubleCycleLinkList * L , int elem )
{
Node * p = L->head->next ;
Node * q = p ;
while( p->elem != elem )
{
q = p ;
p = p->next ;
}
if( p == L->head->next )
{
q->next = p->next ;
p->next->prior = q ;
L->head->next = p->next ;
free(p) ;
}
else
{
q->next = p->next ;
p->next->prior = q ;
free(p) ;
}
}
// 输出
void Print( DoubleCycleLinkList * L )
{
Node * p = L->head->next ;
while( p->next != L->head->next )
{
printf("%d " , p->elem ) ;
p = p->next ;
}
printf("%d " , p->elem ) ;
}
// 测试
int main()
{
DoubleCycleLinkList L ;
Init( &L ) ;
Insert( &L , 5 ) ;
Insert( &L , 3 ) ;
Insert( &L , 8 ) ;
Print( &L ) ;
printf("\n" ) ;
Delete( &L , 3 ) ;
Print( &L ) ;
printf("\n") ;
return 0 ;
}
数据结构-----双向循环链表
最新推荐文章于 2023-04-04 19:52:39 发布