ECE2035 Project 2
Dependencies: mbed mbed-rtos SDFileSystem
doubly_linked_list.h@10:1994adcfc86f, 2021-04-20 (annotated)
- 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?
User | Revision | Line number | New 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 |