Added linked list.
This commit is contained in:
		| @@ -36,7 +36,8 @@ include_directories( | ||||
| 	${GMP_INCLUDE_DIR}) | ||||
|  | ||||
| set(SRCS | ||||
| 	src/main.c) | ||||
| 	"src/linked_list.c" | ||||
| 	"src/main.c") | ||||
|  | ||||
| # Define the C flags. | ||||
| set(CMAKE_C_FLAGS "-std=gnu99 -Wall -Wextra -Werror -Wfatal-errors -Wmissing-declarations -pedantic-errors") | ||||
|   | ||||
							
								
								
									
										65
									
								
								src/linked_list.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/linked_list.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| /* | ||||
|  * Copyright (C) 2018  Ortega Froysa, Nicolás <nortega@themusicinnoise.net> | ||||
|  * Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net> | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include "linked_list.h" | ||||
|  | ||||
| #include <stdlib.h> | ||||
|  | ||||
| void llist_init(struct llist *list) { | ||||
| 	list->size = 0; | ||||
| 	list->first = NULL; | ||||
| 	list->last = NULL; | ||||
| } | ||||
|  | ||||
| int llist_add(struct llist *list, mpz_t num) { | ||||
| 	struct llist_item *item = | ||||
| 		malloc(sizeof(struct llist_item)); | ||||
| 	if(!item) | ||||
| 		return 0; | ||||
|  | ||||
| 	mpz_init(item->num); | ||||
| 	mpz_set(item->num, num); | ||||
|  | ||||
| 	if(!(list->first)) | ||||
| 	{ | ||||
| 		list->first = item; | ||||
| 		list->last = item; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		list->last->next = item; | ||||
| 		list->last = item; | ||||
| 	} | ||||
| 	list->size++; | ||||
|  | ||||
| 	return 1; | ||||
| } | ||||
|  | ||||
| void llist_deinit(struct llist *list) { | ||||
| 	struct llist_item *i = list->first; | ||||
|  | ||||
| 	while(i) | ||||
| 	{ | ||||
| 		mpz_clear(i->num); | ||||
| 		struct llist_item *next = i->next; | ||||
| 		free(i); | ||||
| 		i = next; | ||||
| 	} | ||||
|  | ||||
| 	list->size = 0; | ||||
| } | ||||
							
								
								
									
										37
									
								
								src/linked_list.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/linked_list.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| /* | ||||
|  * Copyright (C) 2018  Ortega Froysa, Nicolás <nortega@themusicinnoise.net> | ||||
|  * Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net> | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <gmp.h> | ||||
|  | ||||
| struct llist_item { | ||||
| 	mpz_t num; | ||||
| 	struct llist_item *prev; | ||||
| 	struct llist_item *next; | ||||
| }; | ||||
|  | ||||
| struct llist { | ||||
| 	struct llist_item *first; | ||||
| 	struct llist_item *last; | ||||
| 	size_t size;  // size of the list | ||||
| }; | ||||
|  | ||||
| void llist_init(struct llist *list); | ||||
| int llist_add(struct llist *list, mpz_t num); | ||||
| void llist_deinit(struct llist *list); | ||||
| @@ -20,7 +20,7 @@ | ||||
|  | ||||
| #include "global.h" | ||||
|  | ||||
| int main(int argc, char *argv[]) { | ||||
| int main() { | ||||
| 	printf("Indivisible %s\n", VERSION); | ||||
|  | ||||
| 	return 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user