2016年12月23日学习总结----双向循环链表操作程序(头插、尾插、中间插入、删除)
2016-12-28 13:37
691 查看
#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);
}
相关文章推荐
- 2016年12月21日学习总结----单向循环链表操作程序(头插,尾插,中间插入,删除,逆序)
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- 数据结构学习(五)——循环双链表的操作之创建,插入、删除
- 双向循环链表的插入和删除
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 双向非循环递增链表——插入,删除,清空
- 如何使用c语言实现双向链表的插入删除操作
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- 双向循环链表删除算法的C++程序实现
- 10实现有序双向循环链表的插入操作
- C语言-----链表的各项操作总结------双向循环链表