#include <stdio.h>
struct node
{
int num;
struct node *prior;
struct node *next;
};
typedef struct node Node;
typedef Node * DLink;
void create_d_link(DLink *head)
{
*head = (DLink)malloc(sizeof(Node));
(*head)->next = *head;
(*head)->prior = *head;
}
void insert_head_node(DLink *newnode,DLink *head)
{
(*newnode)->next = (*head)->next;
(*head)->next->prior = *newnode;
(*head)->next = *newnode;
(*newnode)->prior = *head;
}
void insert_tail_node(DLink *newnode, DLink *head)
{
(*head)->prior->next = *newnode;
(*newnode)->prior = (*head)->prior;
(*newnode)->next = *head;
(*head)->prior = *newnode;
}
int insert_mid_node(DLink *newnode, DLink *head, 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;
return 0;
}
temp = temp->next;
}
return -1;
}
int delete_node(int num, DLink *head)
{
DLink temp = (*head)->next;
while(temp != *head)
{
if(temp->num == num)
{
temp->prior->next = temp->next;
temp->next->prior = temp->prior;
free(temp);
temp = NULL;
return 0;
}
temp = temp->next;
}
return -1;
}
void display_d_link(DLink *head)
{
DLink temp = (*head)->next;
while(temp != *head)
{
printf("temp->num = %d\n",temp->num);
temp = temp->next;
}
}
int main()
{
int i;
DLink head;
DLink newnode;
create_d_link(&head);
for(i = 0; i < 10; i++)
{
newnode = (DLink)malloc(sizeof(Node));
newnode->num = i + 1;
// insert_head_node(&newnode,&head);
insert_tail_node(&newnode,&head);
}
printf("insert tail:\n");
display_d_link(&head);
newnode = (DLink)malloc(sizeof(Node));
newnode->num = 11;
insert_mid_node(&newnode,&head,5);
printf("mid insert:\n");
display_d_link(&head);
delete_node(5,&head);
printf("delete node:\n");
display_d_link(&head);
return 0;
}
带表 双向循环链表的简单操作
最新推荐文章于 2024-07-10 06:31:18 发布