diff options
| author | Thomas Schmucker <ts@its1.de> | 2020-08-14 18:28:32 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2020-08-14 18:28:32 +0200 |
| commit | f024ba4245b37c80dce976c77b519c90115fd205 (patch) | |
| tree | b38bb43f159231d53702c09b2df84ef3f6c9e482 | |
| parent | 327da44ec896f65c12befb5872ce364d0a1fd074 (diff) | |
| download | data-structures-f024ba4245b37c80dce976c77b519c90115fd205.tar.gz data-structures-f024ba4245b37c80dce976c77b519c90115fd205.tar.bz2 data-structures-f024ba4245b37c80dce976c77b519c90115fd205.zip | |
Implement deque_push_front()
| -rw-r--r-- | deque.c | 20 |
1 files changed, 20 insertions, 0 deletions
| @@ -164,6 +164,22 @@ deque_push_back(struct deque *d, T data) | |||
| 164 | ++d->size; | 164 | ++d->size; |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | void | ||
| 168 | deque_push_front(struct deque *d, T data) | ||
| 169 | { | ||
| 170 | if ( d->offset == 0 ) { // Im ersten Element ist kein Platz mehr frei! | ||
| 171 | map_prepend_chunk(d); | ||
| 172 | d->offset = CHUNK_CAPACITY; | ||
| 173 | } | ||
| 174 | |||
| 175 | --d->offset; | ||
| 176 | |||
| 177 | size_t chunk_num = (d->offset / CHUNK_CAPACITY + d->map_begin) % d->map_capacity; | ||
| 178 | |||
| 179 | d->map[chunk_num][d->offset] = data; | ||
| 180 | ++d->size; | ||
| 181 | } | ||
| 182 | |||
| 167 | bool | 183 | bool |
| 168 | deque_pop_front(struct deque *d, T *data) | 184 | deque_pop_front(struct deque *d, T *data) |
| 169 | { | 185 | { |
| @@ -209,6 +225,10 @@ main(void) | |||
| 209 | //deque_show(&c); | 225 | //deque_show(&c); |
| 210 | } | 226 | } |
| 211 | 227 | ||
| 228 | for ( int i = 0; i != 100; ++i ) { | ||
| 229 | deque_push_front(&c, 1000 + i); | ||
| 230 | } | ||
| 231 | |||
| 212 | T data; | 232 | T data; |
| 213 | while ( deque_pop_front(&c, &data) ) { | 233 | while ( deque_pop_front(&c, &data) ) { |
| 214 | printf("%u, ", data); | 234 | printf("%u, ", data); |
