双向循环链表
来源:互联网 发布:电商软件开发价格 编辑:程序博客网 时间:2024/06/06 14:08
//双向循环链表#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int datatype;typedef struct doublelist{ datatype data; struct doublelist *next,*prev;//多了个*prev}double_list,*double_plist;extern void doublelist_init(double_plist *H);extern void doublelist_insert_head(double_plist p,double_plist new);extern void doublelist_insert_tail(double_plist p,double_plist new);extern void doublelist_del(double_plist p);extern void doublelist_del_head(double_plist h);extern void doublelist_del_tail(double_plist h);extern bool is_empty_doublelist(double_plist h);extern void doublelist_show(double_plist h);extern void doublelist_sort(double_plist h);extern void doublelist_create(double_plist h);int main(void){ double_plist h; doublelist_init(&h); doublelist_create(h); doublelist_sort(h); return 0;}//初始化,传入指针的指针void doublelist_init(double_plist *H){ *H = (double_plist)malloc(sizeof(double_list)); if(NULL == *H) { perror("malloc failed"); exit(1); } (*H)->prev = *H;//指向自身 (*H)->next = *H;} //插入在头结点后面/即表头void doublelist_insert_head(double_plist p,double_plist new){ new->next = p->next; p->next->prev = new; p->next = new; new->prev = p;}//插入在头结点前面/即表尾void doublelist_insert_tail(double_plist p,double_plist new){ new->prev = p->prev; p->prev->next = new; p->prev = new; new->next = p;}//删除自己void doublelist_del(double_plist p){ p->next->prev = p->prev; p->prev->next = p->next;}//删除表头void doublelist_del_head(double_plist h){ doublelist_del(h->next);}//删除表尾void doublelist_del_tail(double_plist h){ doublelist_del(h->prev);}//判断空bool is_empty_doubelist(double_plist h){ if(h->next == h) return true; else return false;}//遍历(双向循环链表)void doublelist_show(double_plist h){ double_plist t; printf("|_|"); for(t=h->next;t!=h;t=t->next)//移动t printf("----->%d",t->data); printf("\n");}void doublelist_create(double_plist h){ int n,i; double_plist new; printf("请输入你要创建的个数:"); scanf("%d",&n); for(i=0;i<n;i++) { new = (double_plist)malloc(sizeof(double_list)); if(NULL == new) { perror("malloc failed"); exit(1); } printf("请输入一个数据:"); scanf("%d",&new->data);//输入新结点数据 doublelist_insert_tail(h,new);//将新结点插入到表尾 doublelist_show(h); }}void doublelist_sort(double_plist h){ double_plist p,t; p = h->prev; while(p != h) { if(p->data%2 == 1) p = p->prev;//奇数不动 else { t = p; p = p->prev; doublelist_del(t);//剪切当前结点 doublelist_insert_tail(h,t);//插入到表尾 printf("-----after 升奇降偶-----\n"); doublelist_show(h); } }}
阅读全文
0 0
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 循环双向链表
- 初识Zabbix
- Transformations
- 例题8-13 环形跑道(Just Finish it up, UVa 11093)
- 高效使用搜索引擎
- 剑指offer算法题--链表中倒数第k个节点(c++)
- 双向循环链表
- LeetCode刷题记录5-计算有序数组不同项的个数
- 常用的正则表达式大全
- velocity制作pdf
- 添加网站(虚拟主机)
- git .gitignore规则及取消追踪已追踪文件
- Storm架构基础之ApacheStorm计算模型详解与实战
- ImportError: No module named matplotlib.pyplot
- HDU 1102 Constructing Roads (最小生成树 Prim算法)