From f024ba4245b37c80dce976c77b519c90115fd205 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 14 Aug 2020 18:28:32 +0200 Subject: Implement deque_push_front() --- deque.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'deque.c') diff --git a/deque.c b/deque.c index 56df165..5800997 100644 --- a/deque.c +++ b/deque.c @@ -164,6 +164,22 @@ deque_push_back(struct deque *d, T data) ++d->size; } +void +deque_push_front(struct deque *d, T data) +{ + if ( d->offset == 0 ) { // Im ersten Element ist kein Platz mehr frei! + map_prepend_chunk(d); + d->offset = CHUNK_CAPACITY; + } + + --d->offset; + + size_t chunk_num = (d->offset / CHUNK_CAPACITY + d->map_begin) % d->map_capacity; + + d->map[chunk_num][d->offset] = data; + ++d->size; +} + bool deque_pop_front(struct deque *d, T *data) { @@ -209,6 +225,10 @@ main(void) //deque_show(&c); } + for ( int i = 0; i != 100; ++i ) { + deque_push_front(&c, 1000 + i); + } + T data; while ( deque_pop_front(&c, &data) ) { printf("%u, ", data); -- cgit v1.3