双向循环列表(以linux内核链表为模板)
2016-04-20 23:03
253 查看
author:chen ming dong
今天看了一下Linux内核链表,突然发现自己以前写的链表都是渣。情不自禁就把内核链表搬到了应用APP来实现
linux内核链表代码较简单,可移植型非常高
一个链表多个结构体共用实在看不懂了,内核实在很庞大,有待继续学习,希望能得到大家的支持
写的比较简单,刚入门,希望大家多给点意见
今天看了一下Linux内核链表,突然发现自己以前写的链表都是渣。情不自禁就把内核链表搬到了应用APP来实现
linux内核链表代码较简单,可移植型非常高
一个链表多个结构体共用实在看不懂了,内核实在很庞大,有待继续学习,希望能得到大家的支持
#include<stdio.h> #include<stdlib.h> typedef struct list { int a; struct list *next; struct list *prev; }str; str * creat() { str *p; p=(str *)malloc(sizeof(str)); printf("请输入数据\n"); scanf("%d",&p->a); return p; } // 链表的初始化(自己指向自己)这个头结点是空的 但必须有 void INIT_LIST_HEAD(str *head) { head->next=head; head->prev=head; } void __list_add(str *fresh,str *prev,str *next) { next->prev = fresh; fresh->next = next; fresh->prev = prev; prev->next = fresh; } void list_add(str *head,str *fresh) { __list_add(fresh,head,head->next);//插向头部 } void list_add_tail(str *head,str *fresh)//插向尾部 { __list_add(fresh,head->prev,head); } void __list_del(str *prev,str *next) { prev->next=next; next->prev=prev; } void list_del(str *p) { __list_del(p->prev,p->next); } void del(str* head) { str *p; p=head->next; int i; printf("请问要删除那个节点\n"); scanf("%d",&i); while(--i) p=p->next; list_del(p); } void list_for_each(str *head) { str *pos; printf("正向遍历:"); for (pos = (head)->next;pos != (head);pos = pos->next) printf("%-3d",pos->a); printf("\n"); } void list_for_each_prev(str *head) { str *pos; printf("反向遍历:"); for (pos = (head)->prev; pos != (head); pos = pos->prev) printf("%-3d",pos->a); printf("\n"); } int main() { str *head; head=(str *)malloc(sizeof(str)); INIT_LIST_HEAD(head); while(1) { int m; printf("1.向前添加数据\t2.向后添加数据\t3.删除节点\t7.正向遍历\t8.反向遍历\t9.清空链表\n"); scanf("%d",&m); if(1==m) { str *fresh1; fresh1 = creat(); list_add(head,fresh1); } if(2==m) { str *fresh2; fresh2 = creat(); list_add_tail(head,fresh2); } if(3==m) { del(head); } if(7==m) { list_for_each(head); } if(8==m) { list_for_each_prev(head); } if(9==m) { INIT_LIST_HEAD(head); } } }
写的比较简单,刚入门,希望大家多给点意见
相关文章推荐
- 《Linux内核设计与实现》课本第四章学习总结
- Linux内核分析期中总结
- 每天一个linux命令(12):more命令
- centos7 host修改
- 20135302魏静静——Linux课程期中总结
- linux获取随机数的方法集合
- 最易忽略的东东:iptables和selinux
- Linux系统调用
- linux基础学习之 gsoap calc_test
- Linux配置防火墙详细步骤(iptables命令使用)
- Linux 内核开发 - 内核定时器
- 虚拟机linux配置NFS
- Centos安装protobuf
- Linux学习期中总结
- CentOS 6上搭建LAMP
- Linux内核分析期中总结
- linux 恢复误删除文件
- centos6.5下安装django
- Linux:常用命令
- 每天一个linux命令(11):nl命令