目录
1.结构体设置
typedef struct Link
{
int data;
struct Link *prev;
struct Link *next;
}link;
2.双向循环链表初始化
// 双向循环链表初始化
link *link_init(void)
{
link *node=(link *)malloc(sizeof(link));
node->prev=node;
node->next=node;
return node;
}
3.头插
// 头插
void link_insert_head(link *head,link *node)
{
node->prev=head;
node->next=head->next;
head->next->prev=node;
head->next=node;
}
4.遍历
// 遍历
void display(link *head)
{
link *temp=head->next;
while(temp!=head)
{
printf("%d >> ",temp->data);
temp=temp->next;
}
putchar(10);
}
5.尾插
// 尾插
void link_insert_tail(link *head,link *node)
{
node->next=head;
node->prev=head->prev;
head->prev->next=node;
head->prev=node;
}
6.删除某个数据
// 删除某个数据
void link_del(link *head,int elem)
{
link *temp=head->next;
while(temp!=head)
{
if(temp->data == elem)
{
break;
}
temp=temp->next;
}
if(temp==head)
{
return ;
}
else
{
temp->prev->next=temp->next;
temp->next->prev=temp->prev;
//free(temp);
}
}
7.查询某个数据的位置
// 查询某个数据的位置
int link_search(link *head,int elem)
{
link *temp=head->next;
int n=1;
while(temp!=head)
{
if(temp->data==elem)
{
return n;
}
temp=temp->next;
n++;
}
return -1;
}
8. 修改某个数据为新的数据
// 修改某个数据为新的数据
void link_change(link *head,int elem,int newelem)
{
int add=link_search(head,elem);
link *temp=head;
int i;
for(i=0;i<add;i++) // 1 2 3 4 elem=3
{
temp=temp->next;
}
temp->data=newelem;
}
9. 奇升偶降
// 奇升偶降
void odd_up_even_down(link *head)
{
link *temp=head->prev;
link *p;
while(temp!=head)
{
if(temp->data % 2 == 0)
{
p=temp->prev;
link_del(head,temp->data);
link_insert_tail(head,temp);
temp=p;
}
else
{
temp=temp->prev;
}
}
}