Skip to content

Commit 4df61d6

Browse files
committed
wip
1 parent 65d65c5 commit 4df61d6

File tree

1 file changed

+109
-1
lines changed

1 file changed

+109
-1
lines changed

dequeues/resized_dequeue.c

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,118 @@
1-
typedef struct Dequeue
1+
// TODO: finish implementation
2+
#include <stdio.h>
3+
#include <stdbool.h>
4+
#include <malloc.h>
5+
6+
typedef struct
27
{
38
int *items;
9+
int start_idx;
10+
int end_idx;
411
int size;
512
} Dequeue;
613

14+
void startdequeue(Dequeue *dequeue)
15+
{
16+
dequeue->items = NULL;
17+
dequeue->size = 0;
18+
dequeue->start_idx = 0;
19+
dequeue->end_idx = 0;
20+
}
21+
22+
bool isEmpty(Dequeue *dequeue)
23+
{
24+
return dequeue->items == NULL;
25+
}
26+
27+
int getLength(Dequeue *dequeue)
28+
{
29+
return sizeof(dequeue->items) / sizeof(int);
30+
}
31+
32+
void printDequeue(Dequeue *dequeue)
33+
{
34+
int idx = dequeue->start_idx;
35+
int length = getLength(dequeue);
36+
37+
printf("dequeue\n");
38+
39+
for (int i = 0; i < dequeue->size; i++)
40+
{
41+
printf("%i ", dequeue->items[idx]);
42+
idx = (idx + 1) % length;
43+
}
44+
45+
printf("\n");
46+
}
47+
48+
void resize(Dequeue *dequeue, int length)
49+
{
50+
int new_length = length == 0 ? 1 : 2 * length;
51+
int *new_items = (int *)malloc(sizeof(int) * new_length);
52+
53+
if (dequeue->size > 0)
54+
{
55+
for (int i = 0; i < length; i++)
56+
{
57+
new_items[i] = dequeue->items[i];
58+
}
59+
}
60+
61+
dequeue->items = new_items;
62+
}
63+
64+
bool insertItem(Dequeue *dequeue, int item)
65+
{
66+
int length = isEmpty(dequeue) ? 0 : getLength(dequeue);
67+
68+
if (dequeue->size == length)
69+
{
70+
resize(dequeue, length);
71+
length = getLength(dequeue);
72+
}
73+
74+
int idx = (dequeue->start_idx + dequeue->size) % length;
75+
dequeue->items[idx] = item;
76+
dequeue->size++;
77+
return false;
78+
}
79+
80+
bool removeItem(Dequeue *dequeue, int *item)
81+
{
82+
if (dequeue->size == 0)
83+
{
84+
return false;
85+
}
86+
87+
*item = dequeue->items[dequeue->start_idx];
88+
dequeue->items[dequeue->start_idx] = NULL;
89+
dequeue->start_idx = (dequeue->start_idx + 1) % getLength(dequeue);
90+
return true;
91+
}
92+
793
int main()
894
{
95+
96+
Dequeue dequeue;
97+
startdequeue(&dequeue);
98+
99+
for (int i = 0; i < 5; i++)
100+
{
101+
insertItem(&dequeue, i + 1);
102+
}
103+
104+
printDequeue(&dequeue);
105+
106+
printf("dequeue size => %i \n", dequeue.size);
107+
108+
for (int i = 0; i < 5 / 2; i++)
109+
{
110+
int item;
111+
removeItem(&dequeue, &item);
112+
printf("%i ", item);
113+
}
114+
115+
printDequeue(&dequeue);
116+
9117
return 0;
10118
}

0 commit comments

Comments
 (0)