📄 dlist.h
字号:
#ifndef __DLIST_H_
#define __DLIST_H_
#ifdef __cplusplus
extern "C" {
#endif
/*--------------------------------------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
#ifdef __MEMCHK_ENABLE_
#include "memchk.h"
#endif
/*--------------------------------------------------------------------------------------------*/
/* Copyright notice:
*
* Code comes from the book "Mastering Algorithms with C"
* by Kyle Loudon,
* published by O'Reilly & Associates
*
*/
/*--------------------------------------------------------------------------------------------*/
/*
* Adapted/reformated to suit my own coding style
* Mow-Song, Ng
* 18-02-2003
*
*/
/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
/* Note
* Never pass free() as the function pointer for destroy. This has to be
* followed strictly, especialy when the memchk module is used.
*/
/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
/* double-linked list element */
typedef struct DListElementStruct{
void *data;
struct DListElementStruct *prev;
struct DListElementStruct *next;
} DListElement;
/*--------------------------------------------------------------------------------------------*/
/* double-linked list struct */
typedef struct DListStruct{
int size;
int (*match)(const void *key1, const void *key2);
void (*destroy)(void *data);
void (*print)(int i, const void *data);
DListElement *head;
DListElement *tail;
} DList;
/*--------------------------------------------------------------------------------------------*/
/* Public Interface */
void DListInit(DList *dlist, void (*destroy)(void *data),
int (*match)(const void *key1, const void *key2),
void (*print)(int i, const void *data));
void DListDestroy(DList *dlist);
int DListInsertAsHead(DList *dlist, const void *data);
int DListAppend(DList *dlist, const void *data);
int DListInsertNext(DList *dlist, DListElement *element, const void *data);
int DListInsertPrev(DList *dlist, DListElement *element, const void *data);
int DListRemove(DList *dlist, DListElement *element, void **data);
void DListPrint(const DList *dlist);
int DListInsertListPrev(DList *mainlist, DList *sublist, DListElement *element);
int DListInsertListNext(DList *mainlist, DList *sublist, DListElement *element);
/* Macros */
#define DListSize(dlist) ((dlist)->size)
#define DListHead(dlist) ((dlist)->head)
#define DListTail(dlist) ((dlist)->tail)
#define DListIsHead(element) ((element)->prev == NULL ? 1 : 0)
#define DListIsTail(element) ((element)->next == NULL ? 1 : 0)
#define DListData(element) ((element)->data)
#define DListNext(element) ((element)->next)
#define DListPrev(element) ((element)->prev)
#ifdef __cplusplus
}
#endif
/*--------------------------------------------------------------------------------------------*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -