#include <stdio.h>
#include<stdlib.h>
struct dblnode
{
int num;
struct dblnode *prior,*next;
};
typedef struct dblnode Dblnode;
typedef struct dblnode *Dbllink;
int is_malloc_ok(Dbllink * new_node)
{
if((*new_node)==NULL)
{
printf("fail!\n");
exit(1);
}
return 0;
}
int create_dbllink(Dbllink *head)
{
*head=(Dbllink)malloc(sizeof(Dblnode));
is_malloc_ok(head);
(*head)->next=(*head)->prior=*head;
return 0;
}
int create_newnode(Dbllink *new_node)
{
(*new_node)=(Dbllink)malloc(sizeof(Dblnode));
is_malloc_ok(new_node);
return 0;
}
int insert_node_head(Dbllink *head,Dbllink *new_node)
{
(*head)->next->prior=*new_node;
(*new_node)->prior=(*head);
(*new_node)->next=(*head)->next;
(*head)->next=*new_node;
if((*head)->prior==*head)
{
(*head)->prior=*new_node;
}
return 0;
}
int insert_node_tail(Dbllink *head,Dbllink *new_node)
{
#include<stdlib.h>
struct dblnode
{
int num;
struct dblnode *prior,*next;
};
typedef struct dblnode Dblnode;
typedef struct dblnode *Dbllink;
int is_malloc_ok(Dbllink * new_node)
{
if((*new_node)==NULL)
{
printf("fail!\n");
exit(1);
}
return 0;
}
int create_dbllink(Dbllink *head)
{
*head=(Dbllink)malloc(sizeof(Dblnode));
is_malloc_ok(head);
(*head)->next=(*head)->prior=*head;
return 0;
}
int create_newnode(Dbllink *new_node)
{
(*new_node)=(Dbllink)malloc(sizeof(Dblnode));
is_malloc_ok(new_node);
return 0;
}
int insert_node_head(Dbllink *head,Dbllink *new_node)
{
(*head)->next->prior=*new_node;
(*new_node)->prior=(*head);
(*new_node)->next=(*head)->next;
(*head)->next=*new_node;
if((*head)->prior==*head)
{
(*head)->prior=*new_node;
}
return 0;
}
int insert_node_tail(Dbllink *head,Dbllink *new_node)
{
(*head)->prior->next=*new_node;
(*new_node)->next=*head;
(*new_node)->prior=(*head)->prior;
(*head)->prior=*new_node;
return 0;
}
int display_link_forword(Dbllink *head)
{
Dbllink temp=(*head)->next;
while(temp!=*head)
{
printf("num=%d\n",temp->num);
temp=temp->next;
}
printf("\n");
return 0;
}
int display_link_backword(Dbllink *head)
{
Dbllink temp=(*head)->prior;
while(temp!=*head)
{
printf("num=%d\n",temp->num);
temp=temp->prior;
}
printf("\n");
return 0;
}
int del_node(Dbllink *head,int num)
{
Dbllink temp=(*head)->next;
while(temp->num!=num)
{
temp=temp->next;
}
temp->prior->next=temp->next;
temp->next->prior=temp->prior;
free(temp);
return 0;
}
int release_link(Dbllink *head)
{
Dbllink temp=*head;
while(temp->next!=*head)
{
temp=temp->next;
free(temp);
}
return 0;
}
int mid_link(Dbllink *head,Dbllink *new_node,int num)
{
Dbllink temp;
temp = *head;
(*new_node)->next=*head;
(*new_node)->prior=(*head)->prior;
(*head)->prior=*new_node;
return 0;
}
int display_link_forword(Dbllink *head)
{
Dbllink temp=(*head)->next;
while(temp!=*head)
{
printf("num=%d\n",temp->num);
temp=temp->next;
}
printf("\n");
return 0;
}
int display_link_backword(Dbllink *head)
{
Dbllink temp=(*head)->prior;
while(temp!=*head)
{
printf("num=%d\n",temp->num);
temp=temp->prior;
}
printf("\n");
return 0;
}
int del_node(Dbllink *head,int num)
{
Dbllink temp=(*head)->next;
while(temp->num!=num)
{
temp=temp->next;
}
temp->prior->next=temp->next;
temp->next->prior=temp->prior;
free(temp);
return 0;
}
int release_link(Dbllink *head)
{
Dbllink temp=*head;
while(temp->next!=*head)
{
temp=temp->next;
free(temp);
}
return 0;
}
int mid_link(Dbllink *head,Dbllink *new_node,int num)
{
Dbllink temp;
temp = *head;
while(temp->num != num && temp->next != NULL)
{ temp = temp->next; }
if(temp->num == num) { (*new_node)->next = temp->next; temp->next =(*new_node); }
else { printf("no such node!\n");
}
}
{ temp = temp->next; }
if(temp->num == num) { (*new_node)->next = temp->next; temp->next =(*new_node); }
else { printf("no such node!\n");
}
}
int main()
{
Dbllink head=NULL;
Dbllink new_node=NULL;
int i;
int num;
create_dbllink(&head);
for(i=0;i<10;i++)
{
create_newnode(&new_node);
new_node->num=i;
}
// printf("please input a num\n");
// scanf("%d",&num);
// create_newnode(&new_node);
// new_node->num=num;
// insert_node_tail(&head,&new_node);
release_link(&head);
display_link_forword(&head);
return 0;
}
{
Dbllink head=NULL;
Dbllink new_node=NULL;
int i;
int num;
create_dbllink(&head);
for(i=0;i<10;i++)
{
create_newnode(&new_node);
new_node->num=i;
}
// printf("please input a num\n");
// scanf("%d",&num);
// create_newnode(&new_node);
// new_node->num=num;
// insert_node_tail(&head,&new_node);
release_link(&head);
display_link_forword(&head);
return 0;
}