-
Notifications
You must be signed in to change notification settings - Fork 0
/
structures.c
88 lines (87 loc) · 1.86 KB
/
structures.c
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <stdlib.h>
#include "structures.h"
//stack
void initStack(Stack* stack) {
stack->start = NULL;
}
int isEmptyStack(const Stack* s) {
return s->start == NULL;
}
Stack* NewStack() { //c
Stack* s = (Stack*)malloc(sizeof(Stack));
s->start = NULL;
return s;
}
void push(Stack* stack, Token value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->token = value;
newNode->next = stack->start;
stack->start = newNode;
}
Token pop(Stack* s) {
Token End;
End.type = END;
if (isEmptyStack(s)) {
return End;
}
Node* temp = s->start;
Token poppedValue = temp->token;
s->start = temp->next;
free(temp);
return poppedValue;
}
Token peek(const Stack* s) {
Token End;
End.type = END;
if (isEmptyStack(s)) {
return End;
}
return s->start->token;
}
//queue
Queue* NewQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
return queue;
}
void initQueue(Queue* q) {
q->front = q->rear = NULL;
}
int isEmptyQueue(const Queue* q) {
return q->front == NULL;
}
void enqueue(Queue* q, Token value) {
qNode* newNode = (qNode*)malloc(sizeof(qNode));
newNode->value = value;
newNode->next = NULL;
if (isEmptyQueue(q)) {
q->front = q->rear = newNode;
}
else {
q->rear->next = newNode;
q->rear = newNode;
}
}
Token dequeue(Queue* q) {
if (isEmptyQueue(q)) {
Token token;
ClearToken(&token);
token.type == END;
return token;
}
qNode* temp = q->front;
Token dequeuedValue = temp->value;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
return dequeuedValue;
}
void ClearToken(Token* token) {
token->data = '\0';
token->type = NONE;
token->value = 0.00;
token->func = NONE;
}