some dsa
This commit is contained in:
parent
caf9a7f24b
commit
bbc1b91772
@ -3,11 +3,14 @@
|
|||||||
ctime -begin timeBuild.ctm
|
ctime -begin timeBuild.ctm
|
||||||
|
|
||||||
set CommonCompilerFlags=/nologo /Zi /FC /WX /W4 /wd4201 /wd4100 /wd4189 /wd4244 /wd4127 /wd4456
|
set CommonCompilerFlags=/nologo /Zi /FC /WX /W4 /wd4201 /wd4100 /wd4189 /wd4244 /wd4127 /wd4456
|
||||||
set Sources=../src/main.c
|
@rem set Sources=../src/main.c
|
||||||
|
@rem set OutputName=program.exe
|
||||||
|
set Sources=../src/algorithms_main.c
|
||||||
|
set OutputName=algorithms_test.exe
|
||||||
|
|
||||||
IF NOT EXIST .\build mkdir .\build
|
IF NOT EXIST .\build mkdir .\build
|
||||||
pushd .\build
|
pushd .\build
|
||||||
cl %CommonCompilerFlags% %Sources% -Feprogram.exe
|
cl %CommonCompilerFlags% %Sources% -Fe%OutputName%
|
||||||
set LastError=%ERRORLEVEL%
|
set LastError=%ERRORLEVEL%
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
|||||||
BIN
build/algorithms_test.rdi
Normal file
BIN
build/algorithms_test.rdi
Normal file
Binary file not shown.
3
run.bat
3
run.bat
@ -1,4 +1,5 @@
|
|||||||
@echo off
|
@echo off
|
||||||
pushd build
|
pushd build
|
||||||
call program.exe
|
@rem call program.exe
|
||||||
|
call algorithms_test.exe
|
||||||
popd
|
popd
|
||||||
|
|||||||
104
src/algorithms_main.c
Normal file
104
src/algorithms_main.c
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
// header includes
|
||||||
|
#include "base/base_inc.h"
|
||||||
|
#include "os/os_inc.h"
|
||||||
|
|
||||||
|
// .c includes
|
||||||
|
#include "base/base_inc.c"
|
||||||
|
#include "os/os_inc.c"
|
||||||
|
#include "os/os_entry_point.c"
|
||||||
|
|
||||||
|
#define LOG DebugPrintf
|
||||||
|
function void
|
||||||
|
DebugPrintf(const char* format, ...)
|
||||||
|
{
|
||||||
|
char buffer[4096];
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
vsprintf_s(buffer, sizeof(buffer), format, args);
|
||||||
|
OutputDebugString(buffer);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct F64Node F64Node;
|
||||||
|
struct F64Node
|
||||||
|
{
|
||||||
|
F64Node *prev;
|
||||||
|
F64Node *next;
|
||||||
|
F64 value;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct F64List F64List;
|
||||||
|
struct F64List
|
||||||
|
{
|
||||||
|
F64Node *first;
|
||||||
|
F64Node *last;
|
||||||
|
U32 length;
|
||||||
|
};
|
||||||
|
|
||||||
|
F64Node g_f64_nil_node = {0};
|
||||||
|
|
||||||
|
function void
|
||||||
|
F64_push_node(F64List *list, F64Node *n)
|
||||||
|
{
|
||||||
|
if(list->first == 0)
|
||||||
|
{
|
||||||
|
list->first = n;
|
||||||
|
list->last = n;
|
||||||
|
} else {
|
||||||
|
list->last->next = n;
|
||||||
|
list->last = n;
|
||||||
|
}
|
||||||
|
list->length += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function void
|
||||||
|
F64_push(Arena *arena, F64List *list, F64 value)
|
||||||
|
{
|
||||||
|
F64Node *node = PushArrayZero(arena, F64Node, 1);
|
||||||
|
node->value = value;
|
||||||
|
F64_push_node(list, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
function void
|
||||||
|
print_F64_ll(F64List *list)
|
||||||
|
{
|
||||||
|
for(F64Node *n = list->first; n != 0; n = n->next)
|
||||||
|
{
|
||||||
|
LOG(" %2.f \n", n->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function void
|
||||||
|
reverse_linked_list_lol(void)
|
||||||
|
{
|
||||||
|
Arena *ll_arena = m_make_arena();
|
||||||
|
F64List list = {0};
|
||||||
|
for (U32 i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
F64_push(ll_arena, &list, (F64)i);
|
||||||
|
}
|
||||||
|
|
||||||
|
print_F64_ll(&list);
|
||||||
|
|
||||||
|
F64Node *prev = 0;
|
||||||
|
F64Node *current = list.first;
|
||||||
|
F64Node *next_temp = 0;
|
||||||
|
while(current != 0)
|
||||||
|
{
|
||||||
|
next_temp = current->next;
|
||||||
|
current->next = prev;
|
||||||
|
prev = current;
|
||||||
|
current = next_temp;
|
||||||
|
}
|
||||||
|
list.first = prev;
|
||||||
|
|
||||||
|
print_F64_ll(&list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
EntryPoint(void)
|
||||||
|
{
|
||||||
|
reverse_linked_list_lol();
|
||||||
|
}
|
||||||
@ -102,13 +102,13 @@
|
|||||||
// f, l, n are "first", "last", "node" I think?
|
// f, l, n are "first", "last", "node" I think?
|
||||||
// DLL
|
// DLL
|
||||||
// Doubly Linked List: Each node has a prev and next pointer. Operations: Push back, Push front, remove
|
// Doubly Linked List: Each node has a prev and next pointer. Operations: Push back, Push front, remove
|
||||||
#define DLLInsert_NPZ(f,l,p,n,next,prev,zchk,zset) \
|
#define DLLInsert_NPZ(f,l,p,n,next,prev,zchk,SetNull) \
|
||||||
(zchk(f) ? (((f) = (l) = (n)), zset((n)->next), zset((n)->prev)) :\
|
(zchk(f) ? (((f) = (l) = (n)), SetNull((n)->next), SetNull((n)->prev)) :\
|
||||||
zchk(p) ? (zset((n)->prev), (n)->next = (f), (zchk(f) ? (0) : ((f)->prev = (n))), (f) = (n)) :\
|
zchk(p) ? (SetNull((n)->prev), (n)->next = (f), (zchk(f) ? (0) : ((f)->prev = (n))), (f) = (n)) :\
|
||||||
((zchk((p)->next) ? (0) : (((p)->next->prev) = (n))), (n)->next = (p)->next, (n)->prev = (p), (p)->next = (n),\
|
((zchk((p)->next) ? (0) : (((p)->next->prev) = (n))), (n)->next = (p)->next, (n)->prev = (p), (p)->next = (n),\
|
||||||
((p) == (l) ? (l) = (n) : (0))))
|
((p) == (l) ? (l) = (n) : (0))))
|
||||||
|
|
||||||
#define DLLPushBack_NPZ(f,l,n,next,prev,zchk,zset) DLLInsert_NPZ(f,l,l,n,next,prev,zchk,zset)
|
#define DLLPushBack_NPZ(f,l,n,next,prev,zchk,SetNull) DLLInsert_NPZ(f,l,l,n,next,prev,zchk,SetNull)
|
||||||
|
|
||||||
#define DLLPushBack_NP(f, l, n, next, prev, zchk) \
|
#define DLLPushBack_NP(f, l, n, next, prev, zchk) \
|
||||||
(zchk(f) ? ((f)=(l)=(n),(n)->next=(n)->prev=0) : ((n)->prev=(l),(l)->next=(n),(l)=(n),(n)->next=0))
|
(zchk(f) ? ((f)=(l)=(n),(n)->next=(n)->prev=0) : ((n)->prev=(l),(l)->next=(n),(l)=(n),(n)->next=0))
|
||||||
@ -124,10 +124,10 @@ zchk(p) ? (zset((n)->prev), (n)->next = (f), (zchk(f) ? (0) : ((f)->prev = (n)))
|
|||||||
((n)->next->prev=(n)->prev, \
|
((n)->next->prev=(n)->prev, \
|
||||||
(n)->prev->next=(n)->next) ))
|
(n)->prev->next=(n)->next) ))
|
||||||
|
|
||||||
#define DLLRemove_NPZ(f,l,n,next,prev,zchk,zset) (((f)==(n))?\
|
#define DLLRemove_NPZ(f,l,n,next,prev,zchk,SetNull) (((f)==(n))?\
|
||||||
((f)=(f)->next, (zchk(f) ? (zset(l)) : zset((f)->prev))):\
|
((f)=(f)->next, (zchk(f) ? (SetNull(l)) : SetNull((f)->prev))):\
|
||||||
((l)==(n))?\
|
((l)==(n))?\
|
||||||
((l)=(l)->prev, (zchk(l) ? (zset(f)) : zset((l)->next))):\
|
((l)=(l)->prev, (zchk(l) ? (SetNull(f)) : SetNull((l)->next))):\
|
||||||
((zchk((n)->next) ? (0) : ((n)->next->prev=(n)->prev)),\
|
((zchk((n)->next) ? (0) : ((n)->next->prev=(n)->prev)),\
|
||||||
(zchk((n)->prev) ? (0) : ((n)->prev->next=(n)->next))))
|
(zchk((n)->prev) ? (0) : ((n)->prev->next=(n)->next))))
|
||||||
|
|
||||||
@ -143,17 +143,17 @@ zchk(p) ? (zset((n)->prev), (n)->next = (f), (zchk(f) ? (0) : ((f)->prev = (n)))
|
|||||||
////////////////
|
////////////////
|
||||||
// Queue
|
// Queue
|
||||||
// Queue has only a next pointer. But we can push from front also.
|
// Queue has only a next pointer. But we can push from front also.
|
||||||
// zchk = zero check, zset = zero set
|
// zchk = zero check, SetNull = zero set
|
||||||
#define QueuePush_NZ(f, l, n, next, zchk, zset) (zchk(f)?\
|
#define QueuePush_NZ(f, l, n, next, zchk, SetNull) (zchk(f)?\
|
||||||
(((f)=(l)=(n)), zset((n)->next)):\
|
(((f)=(l)=(n)), SetNull((n)->next)):\
|
||||||
((l)->next=(n),(l)=(n),zset((n)->next)))
|
((l)->next=(n),(l)=(n),SetNull((n)->next)))
|
||||||
|
|
||||||
#define QueuePushFront_NZ(f, l, n, next, zchk, zset) ( zchk(f) ? \
|
#define QueuePushFront_NZ(f, l, n, next, zchk, SetNull) ( zchk(f) ? \
|
||||||
((f)=(l)=(n)), zset((n)->next) : \
|
((f)=(l)=(n)), SetNull((n)->next) : \
|
||||||
((n)->next = (f)), ((f) = (n)) )
|
((n)->next = (f)), ((f) = (n)) )
|
||||||
|
|
||||||
#define QueuePop_NZ(f, l, next, zchk, zset) ( (f)==(l) ? \
|
#define QueuePop_NZ(f, l, next, zchk, SetNull) ( (f)==(l) ? \
|
||||||
(zset(f), zset(l)) : ((f)=(f)->next))
|
(SetNull(f), SetNull(l)) : ((f)=(f)->next))
|
||||||
|
|
||||||
#define QueuePush(f, l, n) QueuePush_NZ(f, l, n, next, CheckNull, SetNull)
|
#define QueuePush(f, l, n) QueuePush_NZ(f, l, n, next, CheckNull, SetNull)
|
||||||
#define QueuePushFront(f, l, n) QueuePushFront_NZ(f, l, n, next, CheckNull, SetNull)
|
#define QueuePushFront(f, l, n) QueuePushFront_NZ(f, l, n, next, CheckNull, SetNull)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user