#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
struct node *next;
struct node *prior;
};
typedef struct node Node;
typedef Node * DLink;
create_head(DLink *head)
{
(*head) = (DLink) malloc(sizeof(Node));
(*head)->next = (*head);
(*head)->prior = (*head);
}
void print_newnode(DLink *head)
{
DLink temp = (*head)->next;
while(temp != (*head))
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
void insert_head_newnode(DLink *head,DLink *newnode)
{
(*newnode)->next = (*head)->next;
(*head)->next->prior = (*newnode);
(*head)->next = (*newnode);
(*newnode)->prior = (*head);
}
void insert_tail_newnode(DLink *head,DLink *newnode)
{
(*head)->prior->next = (*newnode);
(*newnode)->prior = (*head)->prior;
(*newnode)->next = (*head);
(*head)->prior = (*newnode);
}
void insert_mid_newnode(DLink *head,DLink *newnode,int num)
{
DLink temp = (*head)->next;
while(temp != (*head))
{
if(temp->num == num)
{
(*newnode)->next = temp->next;
temp->next->prior = (*newnode);
temp->next = (*newnode);
(*newnode)->prior = temp;
break;
}
temp = temp->next;
}
}
int delete_struct(DLink *head,int num)
{
DLink temp = (*head)->next;
while(temp != (*head))
{
if(temp->num == num)
{
temp->next->prior = temp->prior;
temp->prior->next = temp->next;
free (temp);
temp = NULL;
return 0;
}
temp = temp->next;
}
}
int main()
{
int i;
DLink head;
create_head(&head);
DLink newnode;
for(i = 0;i < 10;i++)
{
newnode = (DLink) malloc(sizeof(Node));
newnode->num = (i + 1);
//insert_head_newnode(&head,&newnode);
insert_tail_newnode(&head,&newnode);
}
print_newnode(&head);
//delete_struct(&head,5);
//print_newnode(&head);
newnode = (DLink) malloc(sizeof(Node));
newnode->num = 11;
insert_mid_newnode(&head,&newnode,5);
print_newnode(&head);
}
#include <stdlib.h>
struct node
{
int num;
struct node *next;
struct node *prior;
};
typedef struct node Node;
typedef Node * DLink;
create_head(DLink *head)
{
(*head) = (DLink) malloc(sizeof(Node));
(*head)->next = (*head);
(*head)->prior = (*head);
}
void print_newnode(DLink *head)
{
DLink temp = (*head)->next;
while(temp != (*head))
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
void insert_head_newnode(DLink *head,DLink *newnode)
{
(*newnode)->next = (*head)->next;
(*head)->next->prior = (*newnode);
(*head)->next = (*newnode);
(*newnode)->prior = (*head);
}
void insert_tail_newnode(DLink *head,DLink *newnode)
{
(*head)->prior->next = (*newnode);
(*newnode)->prior = (*head)->prior;
(*newnode)->next = (*head);
(*head)->prior = (*newnode);
}
void insert_mid_newnode(DLink *head,DLink *newnode,int num)
{
DLink temp = (*head)->next;
while(temp != (*head))
{
if(temp->num == num)
{
(*newnode)->next = temp->next;
temp->next->prior = (*newnode);
temp->next = (*newnode);
(*newnode)->prior = temp;
break;
}
temp = temp->next;
}
}
int delete_struct(DLink *head,int num)
{
DLink temp = (*head)->next;
while(temp != (*head))
{
if(temp->num == num)
{
temp->next->prior = temp->prior;
temp->prior->next = temp->next;
free (temp);
temp = NULL;
return 0;
}
temp = temp->next;
}
}
int main()
{
int i;
DLink head;
create_head(&head);
DLink newnode;
for(i = 0;i < 10;i++)
{
newnode = (DLink) malloc(sizeof(Node));
newnode->num = (i + 1);
//insert_head_newnode(&head,&newnode);
insert_tail_newnode(&head,&newnode);
}
print_newnode(&head);
//delete_struct(&head,5);
//print_newnode(&head);
newnode = (DLink) malloc(sizeof(Node));
newnode->num = 11;
insert_mid_newnode(&head,&newnode,5);
print_newnode(&head);
}