Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "MyDeque.h"
- #define initialAllocation 4
- void DequeNew(deque* dq, int elemSize) {
- dq->elemSize = elemSize;
- dq->allocLen = initialAllocation;
- dq->logLen = 0;
- dq->addr = malloc(dq->elemSize * dq->allocLen);
- assert(dq->addr != NULL);
- }
- int DequeSize(deque* dq) {
- return dq->logLen;
- }
- void growBabeGrow(deque* dq) {
- if (dq->logLen == dq->allocLen) {
- dq->addr = realloc(dq->addr, dq->elemSize * dq->logLen * 2);
- dq->allocLen *= 2;
- }
- assert (dq->addr != NULL);
- }
- void DequePushBack(deque* dq, void* elem) {
- growBabeGrow(dq);
- memcpy((char*)dq->addr + dq->elemSize * dq->logLen, elem, dq->elemSize);
- dq->logLen++;
- }
- void DequePushFront(deque* dq, void* elem) {
- growBabeGrow(dq);
- memmove((char*)dq->addr + dq->elemSize, dq->addr, dq->elemSize * dq->logLen);
- memcpy(dq->addr, elem, dq->elemSize);
- dq->logLen++;
- }
- void DequePopBack(deque* dq, void* elem) {
- assert(dq->logLen > 0);
- dq->logLen--;
- elem = (char*)dq->addr + dq->logLen * dq->elemSize;
- // free((char*)dq->addr + dq->logLen * dq->elemSize);
- }
- void DequePrintInt(deque* dq) {
- for (int i = 0; i < dq->logLen; ++i)
- {
- int* k = (int*)((char*)dq->addr + i * sizeof(int));
- printf("%d\n", *k);
- }
- }
- void DequeDispose(deque* dq) {
- free(dq->addr);
- }
Advertisement
Add Comment
Please, Sign In to add comment