#include <stdio.h>
#include <stdlib.h>
struct dblnode
{
struct dblnode * prior;
int num;
struct dblnode * next;
};
typedef struct dblnode Dblnode;
typedef struct dblnode * Dbllink;
void create_dbllink(Dbllink *head);
void create_newnode(Dbllink *newnode);
void is_malloc_ok(Dbllink *newnode);
void insert_dblnode_head(Dbllink *head,Dbllink *newnode);
void forward_Dblnode(Dbllink *head);
void backward_Dblnode(Dbllink *head);
void create_dbllink(Dbllink *head)
{
create_newnode(head);
(*head)->next = (*head)->prior = *head;
}
void create_newnode(Dbllink *newnode)
{
*newnode = (Dbllink)malloc(sizeof(Dblnode));
is_malloc_ok(newnode);
}
void is_malloc_ok(Dbllink * newnode)
{
if(*newnode == NULL)
{
printf("malloc is error!\n");
exit(-1);
}
}
void insert_dblnode_head(Dbllink *head,Dbllink *newnode)
{
(*newnode)->next = (*head)->next;
(*newnode)->prior = *head;
(*head)->next->prior = *newnode;
(*head)->next = *newnode;
if((*head)->prior == (*head))
{
(*head)->prior = *newnode;
}
}
void insert_dblnode_tail(Dbllink *head,Dbllink *newnode)
{
(*newnode)->next = *head;
(*newnode)->prior = (*head)->prior;
(*head)->prior->next = *newnode;
(*head)->prior = *newnode;
}
void release(Dbllink *head)
{
Dbllink temp;
temp = (*head)->next;
if((*head)->next == NULL)
{
printf("only head !\n");
return;
}
while((*head)->next != NULL)
{
temp = (*head)->next;
(*head)->next = temp->next;
free(temp);
}
printf("free successfully !\n");
}
void forward_Dblnode(Dbllink *head)
{
Dbllink tmp;
tmp = (*head)->next;
while(tmp != *head)
{
printf("num = %d\n",tmp->num);
tmp = tmp->next;
}
}
void backward_Dblnode(Dbllink *head)
{
Dbllink tmp;
tmp = (*head)->prior;
while(tmp != *head)
{
printf("num = %d\n",tmp->num);
tmp = tmp->prior;
}
}
int main()
{
Dbllink head = NULL;
Dbllink newnode = NULL;
int i;
int num[10];
create_dbllink(&head);
for(i = 0;i < 10;i++)
{
create_newnode(&newnode);
newnode->num = i;
// scanf("%d",num[i]);
// insert_dblnode_head(&head,&newnode);
insert_dblnode_tail(&head,&newnode);
}
forward_Dblnode(&head);
backward_Dblnode(&head);
release(&head);
forward_Dblnode(&head);
backward_Dblnode(&head);
return 0;
}
双向循环链表
最新推荐文章于 2023-01-24 16:48:30 发布