Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "linkedList.h"
- #include <stdlib.h>
- struct _element {
- void* data;
- int key;
- element next_element;
- element prev_element;
- };
- struct _list {
- int size;
- element head;
- element tail;
- };
- list createList () {
- list new_list;
- new_list = (list)malloc(sizeof(list));
- new_list->head = NULL;
- new_list->tail = NULL;
- new_list->size = 0;
- return new_list;
- }
- void destroyList (list l) {
- element temp;
- if ((temp = l->head->next_element) == NULL) {
- free(l->head);
- free(l);
- return;
- }
- while (temp != NULL) {
- temp->next_element->prev_element = l->head;
- temp->next_element = NULL;
- temp->prev_element = NULL;
- free(temp);
- temp = l->head->next_element;
- }
- free(l->head);
- free(l);
- }
- element listSearch (list l, int key) {
- element temp;
- temp = l->head;
- while (temp != NULL) {
- if (temp->key == key) {
- return temp;
- }
- temp = temp->next_element;
- }
- if (temp == NULL) {
- return NULL;
- }
- }
- void deleteElement (list l, int key) {
- element to_delete;
- if (l->head->key == key) {
- l->head = to_delete->next_element;
- to_delete->next_element->prev_element = NULL;
- }
- else if (l->tail->key == key) {
- l->tail = to_delete->prev_element;
- to_delete->prev_element->next_element = NULL;
- }
- else {
- to_delete = listSearch(l, key);
- to_delete->prev_element->next_element = to_delete->next_element;
- to_delete->next_element->prev_element = to_delete->prev_element;
- }
- free(to_delete);
- l->size--;
- }
- void elementInsertNext (list l, void* data, int key) {
- element new_element, location;
- new_element = (element)malloc(sizeof(element));
- if (l->head->key == key) {
- l->head->next_element->prev_element = new_element;
- l->head->next_element = new_element;
- }
- else if (l->tail->key == key) {
- l->tail->next_element = new_element;
- l->tail = new_element;
- }
- else {
- location = listSearch(l, key);
- location->next_element->prev_element = new_element;
- location->next_element = new_element;
- }
- l->size++;
- }
- void elementInsertPrev (list l, void* data, int key) {
- element new_element, location;
- new_element = (element)malloc(sizeof(element));
- if (l->head->key == key) {
- l->head->next_element = new_element;
- l->head = new_element;
- }
- else if (l->tail->key == key) {
- l->tail->prev_element->next_element = new_element;
- l->tail->prev_element = new_element;
- }
- else {
- location = listSearch(l, key);
- location->prev_element->next_element = new_element;
- location->prev_element = new_element;
- }
- l->size++;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement