mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-04 08:06:52 +08:00
添加双端队列,用双向循环链表实现。
This commit is contained in:
parent
b4c1421346
commit
bf0fe6c75a
@ -143,6 +143,8 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="deque.c" />
|
||||||
|
<ClCompile Include="deque_test.c" />
|
||||||
<ClCompile Include="list.c" />
|
<ClCompile Include="list.c" />
|
||||||
<ClCompile Include="list_test.c" />
|
<ClCompile Include="list_test.c" />
|
||||||
<ClCompile Include="main.c" />
|
<ClCompile Include="main.c" />
|
||||||
@ -159,6 +161,7 @@
|
|||||||
<ClInclude Include="common.h" />
|
<ClInclude Include="common.h" />
|
||||||
<ClInclude Include="config.h" />
|
<ClInclude Include="config.h" />
|
||||||
<ClInclude Include="demo.h" />
|
<ClInclude Include="demo.h" />
|
||||||
|
<ClInclude Include="deque.h" />
|
||||||
<ClInclude Include="list.h" />
|
<ClInclude Include="list.h" />
|
||||||
<ClInclude Include="queue.h" />
|
<ClInclude Include="queue.h" />
|
||||||
<ClInclude Include="rbtree.h" />
|
<ClInclude Include="rbtree.h" />
|
||||||
|
@ -54,6 +54,12 @@
|
|||||||
<ClCompile Include="list_test.c">
|
<ClCompile Include="list_test.c">
|
||||||
<Filter>测试</Filter>
|
<Filter>测试</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="deque.c">
|
||||||
|
<Filter>源文件</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="deque_test.c">
|
||||||
|
<Filter>测试</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="list.h">
|
<ClInclude Include="list.h">
|
||||||
@ -83,5 +89,8 @@
|
|||||||
<ClInclude Include="config.h">
|
<ClInclude Include="config.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="deque.h">
|
||||||
|
<Filter>头文件</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
113
datastruct/deque.c
Normal file
113
datastruct/deque.c
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
|
||||||
|
#include "deque.h"
|
||||||
|
|
||||||
|
bool deque_push_back(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_push_front(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_pop_back(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_pop_front(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_back(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_front(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool deque_insert(struct _list* self, int index, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_erase(struct _list* self, int index, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int deque_index(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_remove(struct _list* self, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool deque_clear(struct _list* self)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool deque_get(struct _list* self, int index, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_set(struct _list* self, int index, void* obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t deque_size(struct _list* self)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
bool deque_empty(struct _list* self)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void deque_destory(struct _list* self)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void deque_print(struct _list* self)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool deque_init(struct _deque* deque, uint32_t obj_size)
|
||||||
|
{
|
||||||
|
// attribute
|
||||||
|
deque->_obj_size = obj_size;
|
||||||
|
deque->_size = 0;
|
||||||
|
// deque->_capacity = 64;
|
||||||
|
// deque->_ratio = 2;
|
||||||
|
|
||||||
|
// function
|
||||||
|
deque->back = deque_back;
|
||||||
|
deque->clear = deque_clear;
|
||||||
|
deque->destory = deque_destory;
|
||||||
|
deque->empty = deque_empty;
|
||||||
|
deque->erase = deque_erase;
|
||||||
|
deque->front = deque_front;
|
||||||
|
deque->get = deque_get;
|
||||||
|
deque->index = deque_index;
|
||||||
|
deque->insert = deque_insert;
|
||||||
|
deque->pop_back = deque_pop_back;
|
||||||
|
deque->pop_front = deque_pop_back;
|
||||||
|
deque->remove = deque_remove;
|
||||||
|
deque->set = deque_set;
|
||||||
|
deque->size = deque_size;
|
||||||
|
|
||||||
|
|
||||||
|
deque->_head = (struct _deque_node*)malloc(sizeof(struct _deque_node));
|
||||||
|
if (deque->_head == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
deque->_head->prev = deque->_head;
|
||||||
|
deque->_head->next = deque->_head;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
56
datastruct/deque.h
Normal file
56
datastruct/deque.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
#ifndef _DEQUE_H_
|
||||||
|
#define _DEQUE_H_
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
struct _deque_node
|
||||||
|
{
|
||||||
|
void* obj;
|
||||||
|
struct _deque_node* prev;
|
||||||
|
struct _deque_node* next;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _deque
|
||||||
|
{
|
||||||
|
struct _deque_node* _head;
|
||||||
|
|
||||||
|
uint32_t _obj_size; // 元素大小
|
||||||
|
uint32_t _size; // 栈大小
|
||||||
|
uint32_t _capacity; // 总容量
|
||||||
|
uint32_t _ratio; // 扩展比率
|
||||||
|
|
||||||
|
// kernel
|
||||||
|
bool (*push_back)(struct _list* self, void* obj);
|
||||||
|
bool (*push_front)(struct _list* self, void* obj);
|
||||||
|
bool (*pop_back)(struct _list* self, void* obj);
|
||||||
|
bool (*pop_front)(struct _list* self, void* obj);
|
||||||
|
bool (*back)(struct _list* self, void* obj);
|
||||||
|
bool (*front)(struct _list* self, void* obj);
|
||||||
|
|
||||||
|
bool (*insert)(struct _list* self, int index, void* obj);
|
||||||
|
bool (*erase)(struct _list* self, int index, void* obj);
|
||||||
|
|
||||||
|
int (*index)(struct _list* self, void* obj);
|
||||||
|
bool (*remove)(struct _list* self, void* obj);
|
||||||
|
|
||||||
|
bool (*clear)(struct _list* self);
|
||||||
|
|
||||||
|
bool (*get)(struct _list* self, int index, void* obj);
|
||||||
|
bool (*set)(struct _list* self, int index, void* obj);
|
||||||
|
|
||||||
|
// size
|
||||||
|
uint32_t(*size)(struct _list* self);
|
||||||
|
bool (*empty)(struct _list* self);
|
||||||
|
|
||||||
|
// free
|
||||||
|
void (*destory)(struct _list* self);
|
||||||
|
|
||||||
|
// print
|
||||||
|
void (*print)(struct _list* self);
|
||||||
|
void (*print_obj)(void* obj);
|
||||||
|
};
|
||||||
|
|
||||||
|
bool deque_init(struct _deque* deque, uint32_t obj_size);
|
||||||
|
|
||||||
|
#endif
|
7
datastruct/deque_test.c
Normal file
7
datastruct/deque_test.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
#include "deque.h"
|
||||||
|
|
||||||
|
void deque_test(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user