Ransom Conant / Mbed 2 deprecated MbedPacman

Dependencies:   4DGL-uLCD-SE mbed wave_player

Fork of PacMan_Skeleton_unlock by ECE 2035 TA

Committer:
rconant6
Date:
Thu Mar 29 05:05:51 2018 +0000
Revision:
1:fbda247b843b
Adding files;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rconant6 1:fbda247b843b 1 #include <stdlib.h>
rconant6 1:fbda247b843b 2 #include <stdio.h>
rconant6 1:fbda247b843b 3 #include "doubly_linked_list.h"
rconant6 1:fbda247b843b 4
rconant6 1:fbda247b843b 5 DLinkedList* create_dlinkedlist(void) {
rconant6 1:fbda247b843b 6 DLinkedList* newList = (DLinkedList*)malloc(sizeof(DLinkedList));
rconant6 1:fbda247b843b 7 newList->head = NULL;
rconant6 1:fbda247b843b 8 newList->tail = NULL;
rconant6 1:fbda247b843b 9 newList->current = NULL;
rconant6 1:fbda247b843b 10 newList->size = 0;
rconant6 1:fbda247b843b 11 return newList;
rconant6 1:fbda247b843b 12 }
rconant6 1:fbda247b843b 13
rconant6 1:fbda247b843b 14 LLNode* create_llnode(void* data) {
rconant6 1:fbda247b843b 15 LLNode* newNode = (LLNode*)malloc(sizeof(LLNode));
rconant6 1:fbda247b843b 16 newNode->data = data;
rconant6 1:fbda247b843b 17 newNode->previous = NULL;
rconant6 1:fbda247b843b 18 newNode->next = NULL;
rconant6 1:fbda247b843b 19 return newNode;
rconant6 1:fbda247b843b 20 }
rconant6 1:fbda247b843b 21
rconant6 1:fbda247b843b 22 void insertHead(DLinkedList* dLinkedList, void* data){
rconant6 1:fbda247b843b 23 LLNode* newNode = create_llnode(data);
rconant6 1:fbda247b843b 24 if(dLinkedList->head == NULL){
rconant6 1:fbda247b843b 25 dLinkedList->size++;
rconant6 1:fbda247b843b 26 dLinkedList->head = newNode;
rconant6 1:fbda247b843b 27 dLinkedList->tail = newNode;
rconant6 1:fbda247b843b 28 }else{
rconant6 1:fbda247b843b 29 dLinkedList->size++;
rconant6 1:fbda247b843b 30 newNode->next = dLinkedList->head;
rconant6 1:fbda247b843b 31 (dLinkedList->head)->previous = newNode;
rconant6 1:fbda247b843b 32 dLinkedList->head = newNode;
rconant6 1:fbda247b843b 33 }
rconant6 1:fbda247b843b 34 }
rconant6 1:fbda247b843b 35
rconant6 1:fbda247b843b 36
rconant6 1:fbda247b843b 37 void insertTail(DLinkedList* dLinkedList, void* data){
rconant6 1:fbda247b843b 38 LLNode* newNode = create_llnode(data);
rconant6 1:fbda247b843b 39 if(dLinkedList->tail == NULL){
rconant6 1:fbda247b843b 40 dLinkedList->size++;
rconant6 1:fbda247b843b 41 dLinkedList->head = newNode;
rconant6 1:fbda247b843b 42 dLinkedList->tail = newNode;
rconant6 1:fbda247b843b 43 }else{
rconant6 1:fbda247b843b 44 dLinkedList->size++;
rconant6 1:fbda247b843b 45 newNode->previous = dLinkedList->tail;
rconant6 1:fbda247b843b 46 (dLinkedList->tail)->next = newNode;
rconant6 1:fbda247b843b 47 dLinkedList->tail = newNode;
rconant6 1:fbda247b843b 48 }
rconant6 1:fbda247b843b 49 }
rconant6 1:fbda247b843b 50
rconant6 1:fbda247b843b 51 int insertAfter(DLinkedList* dLinkedList, void* newData){
rconant6 1:fbda247b843b 52 LLNode* newNode = create_llnode(newData);
rconant6 1:fbda247b843b 53 if(dLinkedList->current == NULL)
rconant6 1:fbda247b843b 54 return 0;
rconant6 1:fbda247b843b 55 else{
rconant6 1:fbda247b843b 56 if(dLinkedList->current == dLinkedList->tail){
rconant6 1:fbda247b843b 57 insertTail(dLinkedList, newData);
rconant6 1:fbda247b843b 58 return 1;
rconant6 1:fbda247b843b 59 }
rconant6 1:fbda247b843b 60 else{
rconant6 1:fbda247b843b 61 dLinkedList->size++;
rconant6 1:fbda247b843b 62 newNode->previous = dLinkedList->current;
rconant6 1:fbda247b843b 63 newNode->next = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 64 ((dLinkedList->current)->next)->previous = newNode;
rconant6 1:fbda247b843b 65 (dLinkedList->current)->next = newNode;
rconant6 1:fbda247b843b 66 return 1;
rconant6 1:fbda247b843b 67 }
rconant6 1:fbda247b843b 68 }
rconant6 1:fbda247b843b 69
rconant6 1:fbda247b843b 70 }
rconant6 1:fbda247b843b 71
rconant6 1:fbda247b843b 72
rconant6 1:fbda247b843b 73 int insertBefore(DLinkedList* dLinkedList, void* newData){
rconant6 1:fbda247b843b 74 LLNode* newNode = create_llnode(newData);
rconant6 1:fbda247b843b 75 if(dLinkedList->current == NULL)
rconant6 1:fbda247b843b 76 return 0;
rconant6 1:fbda247b843b 77 else{
rconant6 1:fbda247b843b 78 if(dLinkedList->current == dLinkedList->head){
rconant6 1:fbda247b843b 79 insertHead(dLinkedList, newData);
rconant6 1:fbda247b843b 80 return 1;
rconant6 1:fbda247b843b 81 }
rconant6 1:fbda247b843b 82 else{
rconant6 1:fbda247b843b 83 dLinkedList->size++;
rconant6 1:fbda247b843b 84 newNode->next = dLinkedList->current;
rconant6 1:fbda247b843b 85 newNode->previous = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 86 ((dLinkedList->current)->previous)->next = newNode;
rconant6 1:fbda247b843b 87 (dLinkedList->current)->previous = newNode;
rconant6 1:fbda247b843b 88 return 1;
rconant6 1:fbda247b843b 89 }
rconant6 1:fbda247b843b 90 }
rconant6 1:fbda247b843b 91
rconant6 1:fbda247b843b 92 }
rconant6 1:fbda247b843b 93
rconant6 1:fbda247b843b 94
rconant6 1:fbda247b843b 95
rconant6 1:fbda247b843b 96 void* deleteBackward(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 97 if(dLinkedList->current == NULL)
rconant6 1:fbda247b843b 98 return NULL;
rconant6 1:fbda247b843b 99 else{
rconant6 1:fbda247b843b 100 if(dLinkedList->current == dLinkedList->head){
rconant6 1:fbda247b843b 101 if((dLinkedList->current)->next == NULL){
rconant6 1:fbda247b843b 102 free(dLinkedList->head);
rconant6 1:fbda247b843b 103 dLinkedList->head = NULL;
rconant6 1:fbda247b843b 104 dLinkedList->tail = NULL;
rconant6 1:fbda247b843b 105 dLinkedList->current = NULL;
rconant6 1:fbda247b843b 106 return NULL;
rconant6 1:fbda247b843b 107 }
rconant6 1:fbda247b843b 108 else{
rconant6 1:fbda247b843b 109 dLinkedList->head = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 110 free((dLinkedList->head)->previous);
rconant6 1:fbda247b843b 111 dLinkedList->current = NULL;
rconant6 1:fbda247b843b 112 return NULL;
rconant6 1:fbda247b843b 113 }
rconant6 1:fbda247b843b 114 }
rconant6 1:fbda247b843b 115 else{
rconant6 1:fbda247b843b 116 if(dLinkedList->current == dLinkedList->tail){
rconant6 1:fbda247b843b 117 dLinkedList->tail = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 118 (dLinkedList->tail)->next = NULL;
rconant6 1:fbda247b843b 119 free(dLinkedList->current);
rconant6 1:fbda247b843b 120 dLinkedList->current = dLinkedList->tail;
rconant6 1:fbda247b843b 121 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 122 }
rconant6 1:fbda247b843b 123 else{
rconant6 1:fbda247b843b 124 ((dLinkedList->current)->next)->previous = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 125 ((dLinkedList->current)->previous)->next = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 126 free(dLinkedList->current);
rconant6 1:fbda247b843b 127 dLinkedList->current = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 128 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 129 }
rconant6 1:fbda247b843b 130 }
rconant6 1:fbda247b843b 131 }
rconant6 1:fbda247b843b 132
rconant6 1:fbda247b843b 133 }
rconant6 1:fbda247b843b 134
rconant6 1:fbda247b843b 135
rconant6 1:fbda247b843b 136
rconant6 1:fbda247b843b 137 void* deleteForward(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 138 if(dLinkedList->current == NULL)
rconant6 1:fbda247b843b 139 return NULL;
rconant6 1:fbda247b843b 140 else{
rconant6 1:fbda247b843b 141 if(dLinkedList->current == dLinkedList->tail){
rconant6 1:fbda247b843b 142 if((dLinkedList->current)->previous == NULL){
rconant6 1:fbda247b843b 143 free(dLinkedList->tail);
rconant6 1:fbda247b843b 144 dLinkedList->head = NULL;
rconant6 1:fbda247b843b 145 dLinkedList->tail = NULL;
rconant6 1:fbda247b843b 146 dLinkedList->current = NULL;
rconant6 1:fbda247b843b 147 return NULL;
rconant6 1:fbda247b843b 148 }
rconant6 1:fbda247b843b 149 else{
rconant6 1:fbda247b843b 150 dLinkedList->tail = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 151 free((dLinkedList->tail)->next);
rconant6 1:fbda247b843b 152 dLinkedList->current = NULL;
rconant6 1:fbda247b843b 153 return NULL;
rconant6 1:fbda247b843b 154 }
rconant6 1:fbda247b843b 155 }
rconant6 1:fbda247b843b 156 else{
rconant6 1:fbda247b843b 157 if(dLinkedList->current == dLinkedList->head){
rconant6 1:fbda247b843b 158 dLinkedList->head = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 159 (dLinkedList->head)->previous = NULL;
rconant6 1:fbda247b843b 160 free((dLinkedList->head)->previous);
rconant6 1:fbda247b843b 161 dLinkedList->current = dLinkedList->head;
rconant6 1:fbda247b843b 162 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 163 }
rconant6 1:fbda247b843b 164 else{
rconant6 1:fbda247b843b 165 ((dLinkedList->current)->next)->previous = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 166 ((dLinkedList->current)->previous)->next = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 167 free(dLinkedList->current);
rconant6 1:fbda247b843b 168 dLinkedList->current = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 169 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 170
rconant6 1:fbda247b843b 171 }
rconant6 1:fbda247b843b 172 }
rconant6 1:fbda247b843b 173 }
rconant6 1:fbda247b843b 174 }
rconant6 1:fbda247b843b 175
rconant6 1:fbda247b843b 176
rconant6 1:fbda247b843b 177 void destroyList(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 178 if(dLinkedList->head != NULL){
rconant6 1:fbda247b843b 179 getHead(dLinkedList);
rconant6 1:fbda247b843b 180 while(deleteForward(dLinkedList)){};
rconant6 1:fbda247b843b 181 }
rconant6 1:fbda247b843b 182 free(dLinkedList);
rconant6 1:fbda247b843b 183 }
rconant6 1:fbda247b843b 184
rconant6 1:fbda247b843b 185
rconant6 1:fbda247b843b 186
rconant6 1:fbda247b843b 187 void* getHead(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 188 if (dLinkedList->head == NULL)
rconant6 1:fbda247b843b 189 return NULL;
rconant6 1:fbda247b843b 190 else{
rconant6 1:fbda247b843b 191 dLinkedList->current = dLinkedList->head;
rconant6 1:fbda247b843b 192 return (dLinkedList->head)->data;
rconant6 1:fbda247b843b 193 }
rconant6 1:fbda247b843b 194
rconant6 1:fbda247b843b 195
rconant6 1:fbda247b843b 196 }
rconant6 1:fbda247b843b 197
rconant6 1:fbda247b843b 198
rconant6 1:fbda247b843b 199
rconant6 1:fbda247b843b 200 void* getTail(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 201 if (dLinkedList->tail == NULL)
rconant6 1:fbda247b843b 202 return NULL;
rconant6 1:fbda247b843b 203 else{
rconant6 1:fbda247b843b 204 dLinkedList->current = dLinkedList->tail;
rconant6 1:fbda247b843b 205 return (dLinkedList->tail)->data;
rconant6 1:fbda247b843b 206 }
rconant6 1:fbda247b843b 207
rconant6 1:fbda247b843b 208 }
rconant6 1:fbda247b843b 209
rconant6 1:fbda247b843b 210
rconant6 1:fbda247b843b 211
rconant6 1:fbda247b843b 212 void* getCurrent(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 213 if (dLinkedList->current == NULL)
rconant6 1:fbda247b843b 214 return NULL;
rconant6 1:fbda247b843b 215 else{
rconant6 1:fbda247b843b 216 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 217 }
rconant6 1:fbda247b843b 218
rconant6 1:fbda247b843b 219 }
rconant6 1:fbda247b843b 220
rconant6 1:fbda247b843b 221
rconant6 1:fbda247b843b 222
rconant6 1:fbda247b843b 223 void* getNext(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 224 if (dLinkedList->current == NULL || (dLinkedList->current)->next == NULL)
rconant6 1:fbda247b843b 225 return NULL;
rconant6 1:fbda247b843b 226 else{
rconant6 1:fbda247b843b 227 dLinkedList->current = (dLinkedList->current)->next;
rconant6 1:fbda247b843b 228 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 229 }
rconant6 1:fbda247b843b 230
rconant6 1:fbda247b843b 231 }
rconant6 1:fbda247b843b 232
rconant6 1:fbda247b843b 233
rconant6 1:fbda247b843b 234
rconant6 1:fbda247b843b 235 void* getPrevious(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 236 if (dLinkedList->current == NULL|| (dLinkedList->current)->previous == NULL)
rconant6 1:fbda247b843b 237 return NULL;
rconant6 1:fbda247b843b 238 else{
rconant6 1:fbda247b843b 239 dLinkedList->current = (dLinkedList->current)->previous;
rconant6 1:fbda247b843b 240 return (dLinkedList->current)->data;
rconant6 1:fbda247b843b 241 }
rconant6 1:fbda247b843b 242
rconant6 1:fbda247b843b 243 }
rconant6 1:fbda247b843b 244
rconant6 1:fbda247b843b 245
rconant6 1:fbda247b843b 246 int getSize(DLinkedList* dLinkedList){
rconant6 1:fbda247b843b 247 return dLinkedList->size;
rconant6 1:fbda247b843b 248
rconant6 1:fbda247b843b 249 }
rconant6 1:fbda247b843b 250
rconant6 1:fbda247b843b 251