您的位置:首页 > 编程语言 > C语言/C++

带表 双向循环链表的简单操作

2016-12-23 22:42 369 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 双向