双向循环链表
2016-12-22 21:49
295 查看
#include <stdio.h> struct node { int num; struct node *next; }; typedef struct node Node; typedef Node * Link; void creat_link(Link *head) { //*head = NULL; *head = (Link)malloc(sizeof(Node)); (*head)->next = *head; } void insert_head_node(Link *newnode, Link *head) { (*newnode)->next = (*head)->next; (*head)->next = *newnode; } void insert_tail_node(Link *newnode, Link *head) { Link temp = *head; while(temp->next != *head) { temp = temp->next; } temp->next = *newnode; (*newnode)->next = *head; } int insert_mid_node(Link *newnode, Link *head, int num) { Link temp = (*head)->next; while(temp != *head) { if(temp->num == num) { (*newnode)->next = temp->next; temp->next = *newnode; return 0; } temp = temp->next; } } int delete_node(int num, Link *head) { Link ptr = *head; Link temp = ptr->next; while(temp != *head) { if(temp->num == num) { ptr->next = temp->next; free(temp); temp = NULL; return 0; } ptr = temp; temp = temp->next; } } int reverse_link(Link *head) { if((*head)->next == *head || (*head)->next->next == *head) { return 0; } Link ptr = *head; Link str = ptr->next; Link temp = str->next; while(temp != *head) { str->next = ptr; ptr = str; str = temp; temp = temp->next; } str->next = ptr; (*head)->next = str; } int display_link(Link *head) { Link temp = (*head)->next; while(temp != *head) { printf("%d\n",temp->num); temp = temp->next; } } int main() { int i; Link head; Link newnode; creat_link(&head); for(i = 0; i < 10; i++) { newnode = (Link)malloc(sizeof(Node)); newnode->num = i + 1; insert_head_node(&newnode,&head); //insert_tail_node(&newnode,&head); //insert_mid_node(&newnode,&head); } display_link(&head); #if 1 newnode = (Link)malloc(sizeof(Node)); newnode->num = 5; insert_mid_node(&newnode,&head,8); display_link(&head); delete_node(7,&head); reverse_link(&head); display_link(&head); #endif return 0; }
相关文章推荐
- Linux内核中的双向循环链表学习
- 创建一个双向链表或双向循环链表
- 中兴通讯2012笔试题删除双向循环链表中相同的数值
- 双向循环链表
- 双向循环链表插入算法的C++程序实现
- 双向循环链表基本操作的实现(C语言)
- C语言单链表,双向链表,循环单链表,循环双链表的基本操作
- 删除两个双向循环链表中具有相同值的节点
- 小甲鱼 双向循环链表实践
- 数据结构课程设计_双向循环链表
- 数据结构也不是那么没意思之后序二叉树+二叉树转伪双向循环链表
- 双向循环链表--增删查操作
- 数据结构基础(12) --双向循环链表的设计与实现
- 数据结构之静态链表和双向循环链表
- 详解Linux内核之双向循环链表
- 小猪的数据结构辅助教程——2.7 线性表中的双向循环链表
- 线性表链式存储结构实现 --双向循环链表
- 带表头结点的双向循环链表
- 循环双向链表
- 双向循环链表