#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
/************循环链表****************/
typedef struct node
{
int data ;
struct node * next ;
}linklist_t ;
int list_len = 0 ;//循环链表的长度
/****************创建一个空链表***************/
linklist_t * create_list(void)
{
/*************表头不存放数据**************/
linklist_t * h = (linklist_t *)malloc(sizeof(linklist_t));
h->data = 0 ;
h->next = h ;
list_len ++ ;
return h ;
}
int insert_list(linklist_t * h,int value)
{
linklist_t * p = (linklist_t *)malloc(sizeof(linklist_t));
/*****************将两个链表合在一起********************/
/*****************第二个链表结尾作为链表结尾********************/
p->next = h->next ;
h->next = p ;
p->data = value ;
list_len ++ ;
}
/*************将链表中所有元素打印出来**************/
int show_list(linklist_t * h)
{
int i = 0 ;
linklist_t * p = h->next;
for(i=0;i<list_len;i++)
{
printf("%4d",p->data) ;
p = p->next ;
}
printf("\n");
}
/**************链表元素的删除**************/
int remove_list(linklist_t * h,int value)
{
int i = 0 ;
linklist_t * p = h;
for(i=0;i<list_len;i++)
{
if(p->next->data == value)
{
p->next = p->next->next ;
list_len -- ;//每删除一个元素,链表长度减1
break ;
}
p = p->next ;
}
}
/**************链表元素的替换**************/
int modify_list(linklist_t * h,int old,int new)
{
int i = 0 ;
linklist_t * p = h;
for(i=0;i<list_len;i++)
{
if(p->next->data == old)
{
p->next->data = new ;
break ;
}
p = p->next ;
}
}
int main(int argc, const char *argv[])
{
int i ;
linklist_t * H = create_list();
for(i=0;i<N;i++)
{
insert_list(H,i+1);
}
show_list(H);
remove_list(H,5);
show_list(H);
modify_list(H,0,23);
show_list(H);
return 0;
}
[领卓教育]循环链表
最新推荐文章于 2024-09-13 19:36:07 发布