ECE2035 Project 2

Dependencies:   mbed mbed-rtos SDFileSystem

Committer:
kwengryn3
Date:
Tue Apr 20 18:15:22 2021 +0000
Revision:
10:1994adcfc86f
Parent:
4:8e15742ebcc6
adv features

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kwengryn3 0:bff8b9020128 1 //=================================================================
kwengryn3 0:bff8b9020128 2 // Header file for DLL module.
kwengryn3 0:bff8b9020128 3 //
kwengryn3 0:bff8b9020128 4 // Copyright 2020 Georgia Tech. All rights reserved.
kwengryn3 0:bff8b9020128 5 // The materials provided by the instructor in this course are for
kwengryn3 0:bff8b9020128 6 // the use of the students currently enrolled in the course.
kwengryn3 0:bff8b9020128 7 // Copyrighted course materials may not be further disseminated.
kwengryn3 0:bff8b9020128 8 // This file must not be made publicly available anywhere.
kwengryn3 0:bff8b9020128 9 //=================================================================
kwengryn3 0:bff8b9020128 10
kwengryn3 0:bff8b9020128 11 #ifndef DOUBLELINKEDLIST_H
kwengryn3 0:bff8b9020128 12 #define DOUBLELINKEDLIST_H
kwengryn3 0:bff8b9020128 13
kwengryn3 4:8e15742ebcc6 14
kwengryn3 0:bff8b9020128 15 // A linked list node structure.
kwengryn3 0:bff8b9020128 16 typedef struct llnode_t {
kwengryn3 0:bff8b9020128 17 void* data;
kwengryn3 0:bff8b9020128 18 struct llnode_t* prev;
kwengryn3 0:bff8b9020128 19 struct llnode_t* next;
kwengryn3 0:bff8b9020128 20 }LLNode;
kwengryn3 0:bff8b9020128 21
kwengryn3 0:bff8b9020128 22 /// The structure to store the information of a doubly linked list
kwengryn3 0:bff8b9020128 23 typedef struct dlinkedlist_t {
kwengryn3 0:bff8b9020128 24 struct llnode_t* head;
kwengryn3 0:bff8b9020128 25 struct llnode_t* tail;
kwengryn3 0:bff8b9020128 26 int size;
kwengryn3 0:bff8b9020128 27 } DLinkedList;
kwengryn3 0:bff8b9020128 28
kwengryn3 0:bff8b9020128 29 // Used for testing.
kwengryn3 0:bff8b9020128 30 struct LLItem {};
kwengryn3 0:bff8b9020128 31 void testDLL(void);
kwengryn3 0:bff8b9020128 32
kwengryn3 4:8e15742ebcc6 33 void printLinkedList(DLinkedList* dLinkedList);
kwengryn3 4:8e15742ebcc6 34
kwengryn3 0:bff8b9020128 35 /**
kwengryn3 0:bff8b9020128 36 * create_llnode
kwengryn3 0:bff8b9020128 37 *
kwengryn3 0:bff8b9020128 38 * Creates a node by allocating memory for it on the heap,
kwengryn3 0:bff8b9020128 39 * and initializing its previous and next pointers to NULL and its data pointer to the input
kwengryn3 0:bff8b9020128 40 * data pointer
kwengryn3 0:bff8b9020128 41 *
kwengryn3 0:bff8b9020128 42 * @param data A void pointer to data the user is adding to the doublely linked list.
kwengryn3 0:bff8b9020128 43 * @return A pointer to the linked list node
kwengryn3 0:bff8b9020128 44 */
kwengryn3 0:bff8b9020128 45 LLNode* create_llnode(void* data);
kwengryn3 0:bff8b9020128 46
kwengryn3 0:bff8b9020128 47 /**
kwengryn3 0:bff8b9020128 48 * create_dlinkedlist
kwengryn3 0:bff8b9020128 49 *
kwengryn3 0:bff8b9020128 50 * Creates a doubly linked list by allocating memory for it on the heap. Initialize the size to zero,
kwengryn3 0:bff8b9020128 51 * as well as head and tail pointers to NULL
kwengryn3 0:bff8b9020128 52 *
kwengryn3 0:bff8b9020128 53 * @return A pointer to an empty dlinkedlist
kwengryn3 0:bff8b9020128 54 */
kwengryn3 0:bff8b9020128 55 DLinkedList* create_dlinkedlist(void);
kwengryn3 0:bff8b9020128 56
kwengryn3 0:bff8b9020128 57
kwengryn3 0:bff8b9020128 58 /**
kwengryn3 0:bff8b9020128 59 * insertHead
kwengryn3 0:bff8b9020128 60 *
kwengryn3 0:bff8b9020128 61 * Create a new LLNode with the given data and insert it at the head of the doubly linked list.
kwengryn3 0:bff8b9020128 62 *
kwengryn3 0:bff8b9020128 63 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 64 * @param data A void pointer to data the user is adding to the doubly linked list.
kwengryn3 0:bff8b9020128 65 *
kwengryn3 0:bff8b9020128 66 */
kwengryn3 0:bff8b9020128 67 void insertHead(DLinkedList* dLinkedList, void* data);
kwengryn3 0:bff8b9020128 68
kwengryn3 0:bff8b9020128 69 /**
kwengryn3 0:bff8b9020128 70 * deleteNode
kwengryn3 0:bff8b9020128 71 *
kwengryn3 0:bff8b9020128 72 * Delete the node pointed to by Node (splice it out). Update head/tail if necessary.
kwengryn3 0:bff8b9020128 73 * Assumes Node is not NULL.
kwengryn3 0:bff8b9020128 74 *
kwengryn3 0:bff8b9020128 75 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 76 * @param Node A pointer to a linked list node.
kwengryn3 0:bff8b9020128 77 */
kwengryn3 0:bff8b9020128 78 void deleteNode(DLinkedList* dLinkedList, LLNode* Node);
kwengryn3 0:bff8b9020128 79
kwengryn3 0:bff8b9020128 80 /**
kwengryn3 0:bff8b9020128 81 * insertAfter
kwengryn3 0:bff8b9020128 82 *
kwengryn3 0:bff8b9020128 83 * Insert data after the prev_node. Update head/tail if necessary.
kwengryn3 0:bff8b9020128 84 * Assumes prev_node is not NULL.
kwengryn3 0:bff8b9020128 85 *
kwengryn3 0:bff8b9020128 86 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 87 * @param pre_node A pointer to a linked list node.
kwengryn3 0:bff8b9020128 88 * @param data A void pointer to data.
kwengryn3 0:bff8b9020128 89 */
kwengryn3 0:bff8b9020128 90 void insertAfter(DLinkedList* dLinkedList, LLNode* prev_node, void* data);
kwengryn3 0:bff8b9020128 91
kwengryn3 0:bff8b9020128 92 /**
kwengryn3 0:bff8b9020128 93 * insertBefore
kwengryn3 0:bff8b9020128 94 *
kwengryn3 0:bff8b9020128 95 * Insert data before the prev_node (reference node). Update head/tail if necessary.
kwengryn3 0:bff8b9020128 96 * Assumes prev_node is not NULL.
kwengryn3 0:bff8b9020128 97 *
kwengryn3 0:bff8b9020128 98 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 99 * @param pre_node A pointer to a linked list node.
kwengryn3 0:bff8b9020128 100 * @param data A void pointer to data.
kwengryn3 0:bff8b9020128 101 */
kwengryn3 0:bff8b9020128 102 void insertBefore(DLinkedList* dLinkedList, LLNode* prev_node, void* data);
kwengryn3 0:bff8b9020128 103
kwengryn3 0:bff8b9020128 104 /**
kwengryn3 0:bff8b9020128 105 * insertTail
kwengryn3 0:bff8b9020128 106 *
kwengryn3 0:bff8b9020128 107 * Create a new LLNode with the given data and insert it at the tail of the doubly linked list.
kwengryn3 0:bff8b9020128 108 *
kwengryn3 0:bff8b9020128 109 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 110 * @param data A void pointer to data the user is adding to the doubly linked list.
kwengryn3 0:bff8b9020128 111 *
kwengryn3 0:bff8b9020128 112 */
kwengryn3 0:bff8b9020128 113 void insertTail(DLinkedList* dLinkedList, void* data);
kwengryn3 0:bff8b9020128 114
kwengryn3 0:bff8b9020128 115 /**
kwengryn3 0:bff8b9020128 116 * reverse
kwengryn3 0:bff8b9020128 117 *
kwengryn3 0:bff8b9020128 118 * Reverse the order of the doubly linked list. Update head/tail if necessary.
kwengryn3 0:bff8b9020128 119 *
kwengryn3 0:bff8b9020128 120 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 121 *
kwengryn3 0:bff8b9020128 122 */
kwengryn3 0:bff8b9020128 123 void reverse(DLinkedList* dLinkedList);
kwengryn3 0:bff8b9020128 124
kwengryn3 0:bff8b9020128 125
kwengryn3 0:bff8b9020128 126 /**
kwengryn3 0:bff8b9020128 127 * destroyList
kwengryn3 0:bff8b9020128 128 *
kwengryn3 0:bff8b9020128 129 * Destroy the doubly linked list. Everything in the linked list including list structure,
kwengryn3 0:bff8b9020128 130 * nodes and data are all freed from the heap
kwengryn3 0:bff8b9020128 131 *
kwengryn3 0:bff8b9020128 132 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 133 *
kwengryn3 0:bff8b9020128 134 */
kwengryn3 0:bff8b9020128 135 void destroyList(DLinkedList* dLinkedList);
kwengryn3 0:bff8b9020128 136
kwengryn3 0:bff8b9020128 137 /**
kwengryn3 0:bff8b9020128 138 * getSize
kwengryn3 0:bff8b9020128 139 *
kwengryn3 0:bff8b9020128 140 * Return the size of the doubly linked list
kwengryn3 0:bff8b9020128 141 *
kwengryn3 0:bff8b9020128 142 * @param dLinkedList A pointer to the doubly linked list
kwengryn3 0:bff8b9020128 143 * @return the size
kwengryn3 0:bff8b9020128 144 */
kwengryn3 0:bff8b9020128 145 int getSize(DLinkedList* dLinkedList);
kwengryn3 4:8e15742ebcc6 146
kwengryn3 4:8e15742ebcc6 147
kwengryn3 0:bff8b9020128 148 #endif
kwengryn3 0:bff8b9020128 149