您的位置:首页 > 理论基础 > 数据结构算法

数据结构----循环链表

2013-10-22 22:16 176 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct Node
{
int elem ;
struct Node * next ;
} Node ;

typedef struct CycleLinkList
{
Node * head ;
} CycleLinkList ;

// 初始化循环链表
void InitCycleLinkList( CycleLinkList * C )
{
C->head = (Node*)malloc(sizeof(Node)) ;
if( !C->head )
{
printf("申请内存失败!") ;
exit(0) ;
}
C->head->next = NULL ;
}

// 插入
void Insert( CycleLinkList * C , int elem )
{
Node * node = (Node*)malloc(sizeof(Node)) ;
if( !node)
{
printf("申请内存失败!") ;
exit(0) ;
}
node->elem = elem ;

if( C->head->next == NULL )    // 循环链表为空
{
C->head->next = node ;
node->next = C->head->next ;
}
else
{
Node * p = C->head->next ;
while( p->next != C->head->next )
{
p = p->next ;
}
p->next = node ;
node->next = C->head->next ;
}
}

// 删除
void Delete( CycleLinkList * C , int elem )
{
Node * p = C->head->next ;
Node * q = p ;
while( p->elem != elem )
{
q = p ;
p = p->next ;
}

if( p == C->head->next )
{
q->next = p->next ;
C->head->next = p->next ;
free(p) ;
}
else
{
q->next = p->next ;
free(p) ;
}
}

// 输出
void Print( CycleLinkList * C )
{
Node * p = C->head->next ;
while( p->next != C->head->next )
{
printf("%d " , p->elem ) ;
p = p->next ;
}
printf("%d " , p->elem ) ;
}

//测试
int main()
{
CycleLinkList C ;

InitCycleLinkList( &C ) ;

Insert( &C , 5 ) ;
Insert( &C , 3 ) ;
Insert( &C , 8 ) ;

Print( &C ) ;
printf("\n") ;

Delete( &C , 3 ) ;

Print( &C ) ;
printf("\n") ;

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