-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStack.c
More file actions
58 lines (47 loc) · 1.01 KB
/
Stack.c
File metadata and controls
58 lines (47 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "Stack.h"
void InitStack(Stack_t *stack_ptr)
{
stack_ptr->top_ptr = NULL;
}
void StackPush(Stack_t *stack_ptr, void *value_ptr)
{
StackNode_t *node = (StackNode_t *)malloc(sizeof(StackNode_t));
node->next_ptr = NULL;
node->value_ptr = value_ptr;
if (stack_ptr->top_ptr == NULL)
{
stack_ptr->top_ptr = node;
}
else
{
node->next_ptr = stack_ptr->top_ptr;
stack_ptr->top_ptr = node;
}
}
void *StackPop(Stack_t *stack_ptr)
{
if (stack_ptr->top_ptr == NULL)
{
return NULL;
}
StackNode_t *lastTop_ptr = stack_ptr->top_ptr;
void *value_ptr = lastTop_ptr->value_ptr;
stack_ptr->top_ptr = lastTop_ptr->next_ptr;
free(lastTop_ptr);
return value_ptr;
}
void *StackPeek(Stack_t *stack_ptr)
{
if (stack_ptr->top_ptr == NULL)
{
return NULL;
}
return stack_ptr->top_ptr->value_ptr;
}
void FreeStack(Stack_t *stack_ptr)
{
while (stack_ptr->top_ptr != NULL)
{
StackPop(stack_ptr);
}
}