⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlist.h

📁 基于嵌入式零树小波编码的C语言程序实现。
💻 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 + -