带表 双向循环链表的简单操作
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语言-----链表的各项操作总结------双向循环链表
- 详谈双向链表的实现与简单操作
- 《数据结构》 循环链表和双向链表常用操作代码集合
- 数据结构学习之双向循环链表操作
- ListIterator双向迭代的简单操作
- 双向链表的简单操作
- 线性表链式存储(双向循环链表)及其14种操作的实现
- 双向循环链表的简单实现
- Linux下的C语言编程——双向循环链表的简单实现
- 双向链表的简单操作
- 双向循环链表的操作源码
- 链表的基本操作(单链表、双向链表、循环链表)
- 双向循环链表的创建修改插入删除操作
- 高效面试之双向循环链表操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- 双向循环链表操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作