1 Star 0 Fork 2

sfc极速下载/c_language_template

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
queue.h 7.85 KB
一键复制 编辑 原始数据 按行查看 历史
徐南木 提交于 2020-03-14 20:56 . v1.0
/**
* 作者: 徐南木
* 说明: queue是单链表结构
* 编译器: mingw-w64
* 时间: 2020/3/13 9:36
* 详细注解: http://blog.xunanmu.com/2020/03/13/queue.h/
*/
#ifndef TEMPLATE_QUEUE_H
#define TEMPLATE_QUEUE_H
#include "template.h"
#define queue(T) T##queue
#define __queue(T) T##_queue_node
/**************************************************************************/
#define QUEUE_TYPE_SET(T) \
typedef struct __queue(T) __queue(T); \
struct __queue(T) { \
__queue(T) *next; \
T data; \
}; \
typedef struct queue(T) queue(T); \
struct queue(T) { \
size_t (*length)(); \
\
bool (*empty)(); \
\
void (*push)(T data); \
\
T (*pop)(); \
\
T* (*front)(); \
\
T* (*back)(); \
\
void (*delete)(); \
} \
/**************************************************************************/
/***************************************************************************/
#define QUEUE_FUNCTION_BODY(T) \
size_t length_() { \
return length; \
} \
\
bool empty() { \
return length == 0; \
} \
\
void push(T data) { \
if (!front) { \
MALLOC(front, __queue(T), 1); \
front->data = data; \
rear = front; \
++length; \
return; \
} \
__queue(T) *node = NULL; \
MALLOC(node, __queue(T), 1); \
node->data = data; \
rear->next = node; \
rear = node; \
++length; \
} \
\
T pop() { \
UNDERFLOW \
T temp = front->data; \
__queue(T) *node = front->next; \
free(front); \
front = node; \
--length; \
return temp; \
} \
\
T *front_() { \
UNDERFLOW \
return &front->data; \
} \
\
T *back_() { \
UNDERFLOW \
return &rear->data; \
} \
\
void delete() { \
__queue(T) *node = NULL; \
for (; length > 0; --length) { \
node = front->next; \
free(front); \
front = node; \
} \
} \
/***************************************************************************/
#define QUEUE_FUNTION_assignmen \
this.length = length_; \
this.empty = empty; \
this.push = push; \
this.pop = pop; \
this.front = front_; \
this.back = back_; \
this.delete = delete; \
/**************************************************************************/
/**************************************************************************/
#define new_queue(T) \
({ \
size_t length = 0; \
__queue(T) *front = NULL; \
__queue(T) *rear = NULL; \
queue(T) this; \
QUEUE_FUNCTION_BODY(T) \
QUEUE_FUNTION_assignmen \
this; \
}) \
/**************************************************************************/
#endif //TEMPLATE_QUEUE_H
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/sfccdn/c_language_template.git
git@gitee.com:sfccdn/c_language_template.git
sfccdn
c_language_template
c_language_template
master

搜索帮助