ECE 2036 Project
Dependencies: mbed wave_player 4DGL-uLCD-SE
Diff: doublely_linked_list.cpp
- Revision:
- 2:2042f29de6b7
- Parent:
- 0:cf4396614a79
--- a/doublely_linked_list.cpp Wed Nov 08 21:01:43 2017 +0000 +++ b/doublely_linked_list.cpp Thu Nov 21 16:10:57 2019 +0000 @@ -2,147 +2,396 @@ #include <stdio.h> #include "doublely_linked_list.h" -DLinkedList* create_dlinkedlist(void) { - DLinkedList* newList = (DLinkedList*)malloc(sizeof(DLinkedList)); +DLinkedList* create_dlinkedlist(void) +{ + +// printf("create_dlinkedlist\n"); + + DLinkedList* newList = (DLinkedList*) malloc(sizeof(DLinkedList)); + + newList->size = 0; newList->head = NULL; + newList->current = NULL; newList->tail = NULL; - newList->current = NULL; - newList->size = 0; + return newList; + } -LLNode* create_llnode(void* data) { +LLNode* create_llnode(void* data) +{ + +// printf("create_llnode\n"); + + LLNode* newNode = (LLNode*) malloc(sizeof(LLNode)); + + newNode->previous = NULL; + newNode->next = NULL; + newNode->data = data; + + return newNode; + +} + + +void insertHead(DLinkedList* dLinkedList, void* data) +{ - // Your code here - return NULL; +// printf("insertHead\n"); + + LLNode* newNode = create_llnode(data); + + if (dLinkedList->head == NULL) { + + dLinkedList->size++; + dLinkedList->head = newNode; + dLinkedList->tail = newNode; + + } else { + + dLinkedList->size++; + newNode->next = dLinkedList->head; + (dLinkedList->head)->previous = newNode; + dLinkedList->head = newNode; + + } } -void insertHead(DLinkedList* dLinkedList, void* data){ - LLNode* newNode = create_llnode(data); - if(dLinkedList->head == NULL){ - dLinkedList->size++; - dLinkedList->head = newNode; - dLinkedList->tail = newNode; - }else{ - dLinkedList->size++; - newNode->next = dLinkedList->head; - (dLinkedList->head)->previous = newNode; - dLinkedList->head = newNode; - } -} +void insertTail(DLinkedList* dLinkedList, void* data) +{ + +// printf("insertTail\n"); + + LLNode* newNode = create_llnode(data); + + if (dLinkedList->tail == NULL) { + dLinkedList->size++; + dLinkedList->tail = newNode; + dLinkedList->head = newNode; -void insertTail(DLinkedList* dLinkedList, void* data){ + } else { - // Your code here + dLinkedList->size++; + newNode->previous = dLinkedList->tail; + (dLinkedList->tail)->next = newNode; + dLinkedList->tail = newNode; + + } } -int insertAfter(DLinkedList* dLinkedList, void* newData){ +int insertAfter(DLinkedList* dLinkedList, void* newData) +{ + +// printf("insertAfter\n"); + + if (dLinkedList->current == NULL) { + return 0; + } + + LLNode* newNode = create_llnode(newData); - // Your code here - return 0; + dLinkedList->size++; + newNode->next = (dLinkedList->current)->next; + newNode->previous = dLinkedList->current; + if (newNode->next == NULL) { + dLinkedList->tail = newNode; + } else { + (newNode->next)->previous = newNode; + } + (newNode->previous)->next = newNode; + + return 1; } -int insertBefore(DLinkedList* dLinkedList, void* newData){ +int insertBefore(DLinkedList* dLinkedList, void* newData) +{ + +// printf("insertBefore\n"); + + if (dLinkedList->current == NULL) { + return 0; + } + + LLNode* newNode = create_llnode(newData); - // Your code here - return 0; + dLinkedList->size++; + newNode->next = dLinkedList->current; + newNode->previous = (dLinkedList->current)->previous; + (newNode->next)->previous = newNode; + if (newNode->previous == NULL) { + dLinkedList->head = newNode; + } else { + (newNode->previous)->next = newNode; + } + + return 1; } -void* deleteBackward(DLinkedList* dLinkedList){ +void* deleteBackward(DLinkedList* dLinkedList) +{ + +// printf("deleteBackward\n"); + + if (dLinkedList->current == NULL) { + return NULL; + } + + dLinkedList->size--; + + free((dLinkedList->current)->data); - //Your code here. - return NULL; + if ((dLinkedList->current)->previous == NULL) { + dLinkedList->head = (dLinkedList->current)->next; + } else { + ((dLinkedList->current)->previous)->next = (dLinkedList->current)->next; + } + + if ((dLinkedList->current)->next == NULL) { + dLinkedList->tail = (dLinkedList->current)->previous; + } else { + ((dLinkedList->current)->next)->previous = (dLinkedList->current)->previous; + } + + LLNode* newCurrent = (dLinkedList->current)->previous; + + free(dLinkedList->current); + dLinkedList->current = newCurrent; + + if (dLinkedList->current == NULL) { + return NULL; + } + + return (dLinkedList->current)->data; } -void* deleteForward(DLinkedList* dLinkedList){ +void* deleteForward(DLinkedList* dLinkedList) +{ + +// printf("deleteForward\n"); + + if (dLinkedList->current == NULL) { + return NULL; + } + + dLinkedList->size--; + + free((dLinkedList->current)->data); - //Your code here. - return NULL; + if ((dLinkedList->current)->previous == NULL) { + dLinkedList->head = (dLinkedList->current)->next; + } else { + ((dLinkedList->current)->previous)->next = (dLinkedList->current)->next; + } + + if ((dLinkedList->current)->next == NULL) { + dLinkedList->tail = (dLinkedList->current)->previous; + } else { + ((dLinkedList->current)->next)->previous = (dLinkedList->current)->previous; + } + + LLNode* newCurrent = (dLinkedList->current)->next; + + free(dLinkedList->current); + dLinkedList->current = newCurrent; + + if (dLinkedList->current == NULL) { + return NULL; + } + + return (dLinkedList->current)->data; } -void* removeBackward(DLinkedList* dLinkedList){ +void* removeBackward(DLinkedList* dLinkedList) +{ + +// printf("removeBackward\n"); + + if (dLinkedList->current == NULL) { + return NULL; + } + + dLinkedList->size--; - //Your code here. - return NULL; + if ((dLinkedList->current)->previous == NULL) { + dLinkedList->head = (dLinkedList->current)->next; + } else { + ((dLinkedList->current)->previous)->next = (dLinkedList->current)->next; + } + + if ((dLinkedList->current)->next == NULL) { + dLinkedList->tail = (dLinkedList->current)->previous; + } else { + ((dLinkedList->current)->next)->previous = (dLinkedList->current)->previous; + } + + void* oldData = (dLinkedList->current)->data; + + LLNode* newCurrent = (dLinkedList->current)->previous; + + free(dLinkedList->current); + dLinkedList->current = newCurrent; + + return oldData; } -void* removeForward(DLinkedList* dLinkedList){ +void* removeForward(DLinkedList* dLinkedList) +{ + +// printf("removeForward\n"); + + if (dLinkedList->current == NULL) { + return NULL; + } + + dLinkedList->size--; - //Your code here. - return NULL; + if ((dLinkedList->current)->previous == NULL) { + dLinkedList->head = (dLinkedList->current)->next; + } else { + ((dLinkedList->current)->previous)->next = (dLinkedList->current)->next; + } + + if ((dLinkedList->current)->next == NULL) { + dLinkedList->tail = (dLinkedList->current)->previous; + } else { + ((dLinkedList->current)->next)->previous = (dLinkedList->current)->previous; + } + + void* oldData = (dLinkedList->current)->data; + + LLNode* newCurrent = (dLinkedList->current)->next; + + free(dLinkedList->current); + dLinkedList->current = newCurrent; + + return oldData; } -void destroyList(DLinkedList* dLinkedList){ - if(dLinkedList->head != NULL){ - getHead(dLinkedList); - while(deleteForward(dLinkedList)){}; - } - free(dLinkedList); +void destroyList(DLinkedList* dLinkedList) +{ + +// printf("destroyList\n"); + + if (dLinkedList->head != NULL) { + getHead(dLinkedList); + while(deleteForward(dLinkedList)) {}; + } + + free(dLinkedList); + } -void* getHead(DLinkedList* dLinkedList){ +void* getHead(DLinkedList* dLinkedList) +{ + +// printf("getHead\n"); - //Your code here. - return NULL; + dLinkedList->current = dLinkedList->head; + + if (dLinkedList->head == NULL) { + return NULL; + } + + return (dLinkedList->head)->data; } -void* getTail(DLinkedList* dLinkedList){ +void* getTail(DLinkedList* dLinkedList) +{ + +// printf("getTail\n"); + + dLinkedList->current = dLinkedList->tail; - //Your code here. + if (dLinkedList->tail == NULL) { + return NULL; + } - return NULL; + return (dLinkedList->tail)->data; + } -void* getCurrent(DLinkedList* dLinkedList){ +void* getCurrent(DLinkedList* dLinkedList) +{ + +// printf("getCurrent\n"); - //Your code here. - return NULL; + if (dLinkedList->current == NULL) { + return NULL; + } + + return (dLinkedList->current)->data; } -void* getNext(DLinkedList* dLinkedList){ +void* getNext(DLinkedList* dLinkedList) +{ + +// printf("getNext\n"); + + if (dLinkedList->current == NULL) { + return NULL; + } - //Your code here. + dLinkedList->current = (dLinkedList->current)->next; - return NULL; + if (dLinkedList->current == NULL) { + return NULL; + } + + return (dLinkedList->current)->data; + } -void* getPrevious(DLinkedList* dLinkedList){ +void* getPrevious(DLinkedList* dLinkedList) +{ + +// printf("getPrevious\n"); + + if (dLinkedList->current == NULL) { + return NULL; + } - //Your code here. + dLinkedList->current = (dLinkedList->current)->previous; - return NULL; + if (dLinkedList->current == NULL) { + return NULL; + } + + return (dLinkedList->current)->data; + } -int getSize(DLinkedList* dLinkedList){ +int getSize(DLinkedList* dLinkedList) +{ - //Your code here. - return 0; +// printf("getSize\n"); + + return dLinkedList->size; } \ No newline at end of file