aboutsummaryrefslogtreecommitdiff
path: root/sem3/algo/mm2/linked/llist.c
diff options
context:
space:
mode:
Diffstat (limited to 'sem3/algo/mm2/linked/llist.c')
-rw-r--r--sem3/algo/mm2/linked/llist.c127
1 files changed, 62 insertions, 65 deletions
diff --git a/sem3/algo/mm2/linked/llist.c b/sem3/algo/mm2/linked/llist.c
index 8044e0b..e4166ee 100644
--- a/sem3/algo/mm2/linked/llist.c
+++ b/sem3/algo/mm2/linked/llist.c
@@ -3,92 +3,89 @@
#include <string.h>
#include <stdio.h>
-
#define OUT_OFF_BOUNDS 2
void llist_init(llist_t *list)
{
- /* Zero out structure */
- list->head = list->root = NULL;
-
- list->len = 0;
+ /* Zero out structure */
+ list->head = list->root = NULL;
+ list->len = 0;
}
void llist_append(llist_t *list, int val)
{
- /* Insert node after HEAD */
- list->head = node_insert(list->head, val);
+ /* Insert node after HEAD */
+ list->head = node_insert(list->head, val);
- /* Check if was list is empty */
- if ( list->len == 0 ) {
- /* Set root */
- list->root = list->head;
- }
+ /* Check if was list is empty */
+ if (list->len == 0) {
+ /* Set root */
+ list->root = list->head;
+ }
- /* Increase count */
- list->len++;
+ /* Increase count */
+ list->len++;
}
node_t *llist_get_node(llist_t *list, unsigned int index)
{
- /* Check if we have it */
- if ( index >= list->len ) {
- return NULL;
- }
-
- /* Find the best way to go down the list */
- int direc = index > (list->len / 2) ? -1 : 1;
-
- /* Setup start location */
- int pos = direc > 0 ? 0 : list->len-1;
- node_t *node = direc > 0 ? list->root : list->head;
-
- /* Go to index */
- while ( pos != index ) {
- /* TODO kinda risky, we trust our math and len */
- node = direc > 0 ? node->next : node->prev;
-
- pos += direc;
- }
-
- return node;
+ /* Check if we have it */
+ if (index >= list->len) {
+ return NULL;
+ }
+
+ /* Find the best way to go down the list */
+ int direc = index > (list->len / 2) ? -1 : 1;
+
+ /* Setup start location */
+ int pos = direc > 0 ? 0 : list->len - 1;
+ node_t *node = direc > 0 ? list->root : list->head;
+
+ /* Go to index */
+ while (pos != index) {
+ /* TODO kinda risky, we trust our math and len */
+ node = direc > 0 ? node->next : node->prev;
+
+ pos += direc;
+ }
+
+ return node;
}
int llist_get(llist_t *list, unsigned int index)
{
- /* Get node */
- node_t *node = llist_get_node(list, index);
- if ( node == NULL ) {
- /* Yes i know this is stupid */
- return -1;
- }
-
- /* Return value */
- return node->val;
+ /* Get node */
+ node_t *node = llist_get_node(list, index);
+ if (node == NULL) {
+ /* Yes i know this is stupid */
+ return -1;
+ }
+
+ /* Return value */
+ return node->val;
}
-
int llist_pop(llist_t *list, unsigned int index)
{
- /* Get node */
- node_t *node = llist_get_node(list, index);
- if ( node == NULL ) {
- /* Yes i know this is stupid */
- return -1;
- }
-
- /* Update root and head if we delete it */
- if ( node == list->root ) {
- list->root = node->next;
- }
- if ( node == list->head ) {
- list->head = node->prev;
- }
-
- /* Keep len up to date */
- list->len--;
-
- /* Delete stuff */
- return node_pop(node);
+ /* Get node */
+ node_t *node = llist_get_node(list, index);
+ if (node == NULL) {
+ /* Yes i know this is stupid */
+ return -1;
+ }
+
+ /* Update root and head if we delete it */
+ if (node == list->root) {
+ list->root = node->next;
+ }
+ if (node == list->head) {
+ list->head = node->prev;
+ }
+
+ /* Keep len up to date */
+ list->len--;
+
+ /* Delete stuff */
+ return node_pop(node);
}