代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
内核中链表的实用方法以及简单的demo
作者:
bingo125
/ 发布于
2013/5/6
/
710
内核中链表的实用方法以及简单的demo
#include <stdio.h> #include <assert.h> #include <stdlib.h> struct list { struct list* pri; struct list* next; }; int list_init(list* head) { assert(head != NULL); head->next = NULL; head->pri = head; return 0; } int list_add_tail(list* head, list* pos) { assert(head != NULL||pos != NULL); struct list * tail = head; while (tail->next != NULL) { tail = tail->next; } pos->next = NULL; pos->pri = tail; tail->next = pos; return 0; } //如容许对head 节点进行del操作 int list_del(list* head, list* pos) { // 判断pos 不为头节点 assert(head != NULL||pos != NULL||pos != head); if (pos != head) { pos->pri->next = pos->next; if(pos->next != NULL){ pos->next->pri = pos->pri; } //当删除最后一个元素的时候,只需要将前一个节点的最后next置为null且这一步已经做了,于是需要任何操作 } else // 当前链表有多个链 { head = head->next; head->pri = head; } return 0; } int list_destory(list*head) { head->next = NULL; head->pri = NULL; return 0; } typedef void* (*entery)(list * pos); void * list_entery(list * pos, entery fnEntery) { assert(pos == NULL || fnEntery == NULL); return fnEntery(pos); } #define offsetof(s,m) (size_t)&(((s *)0)->m) #define container_of(ptr, type, member) ({const typeof( ((type *)0)->member ) *__mptr = (ptr);\ (type *)( (char *)__mptr - offsetof(type,member) );}) typedef struct strcut { int num; struct list list; } demo, *pDemo; int main(int argc, char **argv) { struct list head; int score,num; list_init(&head); printf("please set the number of student \n"); scanf("%d", &num); for (int i = 0; i < num; i++) { pDemo newDemo = (pDemo) malloc((sizeof(demo))); if (newDemo == NULL) { printf("no enough mem\n"); goto FREEALL; } printf("set score for them %d \n",i); scanf("%d",&score ); newDemo->num = score; list_add_tail(&head,&newDemo->list); } // after all ,we show it for(list * pos = head.next;pos!=NULL;pos = pos->next ) { pDemo tmp = container_of(pos,demo,list); printf("%d \n",tmp->num); } FREEALL : struct list *pos; for(pos = head.next;pos!=NULL;pos = pos->next ) { pDemo tmp = container_of(pos,demo,list); list_del(&head, pos); free(tmp); } list_destory(&head); return 0; }
试试其它关键字
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
bingo125
贡献的其它代码
(
2
)
.
中文转拼音
.
内核中链表的实用方法以及简单的demo
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3