outsource to sperate header

prettify print
This commit is contained in:
lukas-heiligenbrunner 2022-05-25 11:37:39 +02:00
parent e2b0f73d1a
commit 4b96909c5c
3 changed files with 142 additions and 131 deletions

View File

@ -3,4 +3,4 @@ project(untitled C)
set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD 99)
add_executable(untitled main.c) add_executable(untitled main.c List.h)

140
List.h Normal file
View File

@ -0,0 +1,140 @@
//
// Created by lukas on 5/25/22.
//
#ifndef UNTITLED_LIST_H
#define UNTITLED_LIST_H
#include <malloc.h>
struct Node {
struct Node *next;
struct Node *prev;
void *dta;
};
typedef struct Node Node;
typedef struct {
Node *head;
unsigned length;
} List;
List *newList() {
List *list = malloc(sizeof(List));
return list;
}
Node *_newNode(Node *next, Node *prev, void *dta) {
Node *newnode = malloc(sizeof(Node));
newnode->next = next;
newnode->prev = prev;
newnode->dta = dta;
return newnode;
}
Node *_traverseToLast(Node *node) {
if (node->next != NULL) {
return _traverseToLast(node->next);
} else {
return node;
}
}
Node *_traverseToPos(Node *node, int pos) {
if (pos > 0) {
if (node->next != NULL) {
return _traverseToPos(node->next, pos - 1);
} else {
return NULL;
}
} else {
return node;
}
}
void append(List *list, void *elem) {
if (list->head == NULL) {
// create head
list->head = _newNode(NULL, NULL, elem);
} else {
// append element
Node *last = _traverseToLast(list->head);
last->next = _newNode(NULL, last, elem);
}
}
int _length(Node *node) {
if (node->next == NULL) {
return 1;
} else {
return 1 + _length(node->next);
}
}
int length(List *list) {
if (list->head == NULL) {
return 0;
}
return _length(list->head);
}
void insert(List *list, int position) {
}
void delete(List *list, int position) {
Node *todel = _traverseToPos(list->head, position);
if (todel->prev == NULL) {
// we are the header
list->head = todel->next;
if (list->head != NULL) {
list->head->prev = NULL;
}
} else if (todel->next == NULL) {
// we are the last item
todel->prev->next = NULL;
} else {
todel->prev->next = todel->next;
todel->next->prev = todel->prev;
}
free(todel);
}
void deleteAll(List *list) {
while (list->head != NULL) {
delete(list, 0);
}
}
void deleteList(List *list) {
deleteAll(list);
free(list);
}
List *merge(List *list1, List *list2) {
return NULL;
}
void *first(List *list) {
return list->head->dta;
}
void *last(List *list) {
return _traverseToLast(list->head)->dta;
}
void print(List *list, char *typeFormatter) {
Node *curr = list->head;
printf("{");
while (curr != NULL) {
printf(typeFormatter, curr->dta);
printf(", ");
curr = curr->next;
}
printf("}\n");
}
#endif //UNTITLED_LIST_H

131
main.c
View File

@ -1,134 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <malloc.h> #include "List.h"
#include <limits.h>
struct Node {
struct Node *next;
struct Node *prev;
void *dta;
};
typedef struct Node Node;
typedef struct {
Node *head;
unsigned length;
} List;
List *newList() {
List *list = malloc(sizeof(List));
return list;
}
Node *_newNode(Node *next, Node *prev, void *dta) {
Node *newnode = malloc(sizeof(Node));
newnode->next = next;
newnode->prev = prev;
newnode->dta = dta;
return newnode;
}
Node *_traverseToLast(Node *node) {
if (node->next != NULL) {
return _traverseToLast(node->next);
} else {
return node;
}
}
Node *_traverseToPos(Node *node, int pos) {
if (pos > 0) {
if (node->next != NULL) {
return _traverseToPos(node->next, pos - 1);
} else {
return NULL;
}
} else {
return node;
}
}
void append(List *list, void *elem) {
if (list->head == NULL) {
// create head
list->head = _newNode(NULL, NULL, elem);
} else {
// append element
Node *last = _traverseToLast(list->head);
last->next = _newNode(NULL, last, elem);
}
}
int _length(Node *node) {
if (node->next == NULL) {
return 1;
} else {
return 1 + _length(node->next);
}
}
int length(List *list) {
if (list->head == NULL) {
return 0;
}
return _length(list->head);
}
void insert(List *list, int position) {
}
void delete(List *list, int position) {
Node *todel = _traverseToPos(list->head, position);
if (todel->prev == NULL) {
// we are the header
list->head = todel->next;
if (list->head != NULL) {
list->head->prev = NULL;
}
} else if (todel->next == NULL) {
// we are the last item
todel->prev->next = NULL;
} else {
todel->prev->next = todel->next;
todel->next->prev = todel->prev;
}
free(todel);
}
void deleteAll(List *list) {
while (list->head != NULL) {
delete(list, 0);
}
}
void deleteList(List *list) {
deleteAll(list);
free(list);
}
List *merge(List *list1, List *list2) {
return NULL;
}
void *first(List *list) {
return list->head->dta;
}
void *last(List *list) {
return _traverseToLast(list->head)->dta;
}
void print(List *list, char *typeFormatter) {
Node *curr = list->head;
while (curr != NULL) {
printf(typeFormatter, curr->dta);
printf("\n");
curr = curr->next;
}
}
int main() { int main() {
printf("Hello, World!\n"); printf("Hello, World!\n");