Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct node {
- struct node *next;
- int id;
- char title[64];
- } node_t;
- int listAdd(node_t **, char *);
- int listSwapWithNext(node_t **, size_t);
- int listSort(node_t **);
- int listPrint(node_t **);
- int main()
- {
- node_t *lista = NULL;
- listAdd(&lista, "abcde");
- listAdd(&lista, "abcd");
- listAdd(&lista, "abc");
- listAdd(&lista, "ab");
- listAdd(&lista, "a");
- listPrint(&lista);
- listSort(&lista);
- listPrint(&lista);
- return 0;
- }
- int listAdd(node_t **_list, char *_title)
- {
- node_t *pointer = *_list;
- node_t *newNode;
- newNode = malloc(sizeof(node_t));
- newNode->next = NULL;
- newNode->id = 0;
- strcpy(newNode->title, _title);
- if(pointer)
- {
- while(pointer->next)
- pointer = pointer->next;
- newNode->id = pointer->id + 1;
- pointer->next = newNode;
- }
- else *_list = newNode;
- return 0;
- }
- int listSwapWithNext(node_t **_list, size_t first)
- {
- node_t *pointer = *_list;
- node_t *ptr_b;
- node_t *ptr_c;
- node_t *ptr_d;
- if(!first)
- ptr_b = pointer;
- for(size_t i = 0; pointer->next->next; i++, pointer = pointer->next)
- {
- if(i == first - 1 || first == 0)
- {
- if(first)
- ptr_b = pointer->next;
- ptr_c = ptr_b->next;
- ptr_d = ptr_c->next;
- if(first)
- pointer->next = ptr_c;
- else
- *_list = ptr_c;
- ptr_c->next = ptr_b;
- ptr_b->next = ptr_d;
- break;
- }
- }
- return 0;
- }
- size_t listSize(node_t **_list)
- {
- node_t *pointer = *_list;
- size_t _size;
- for(_size = 0; pointer; _size++)
- pointer = pointer->next;
- return _size;
- }
- int listSort(node_t ** _list)
- {
- int size = listSize(_list);
- int i;
- for(i = 0; i < size; i++)
- {
- node_t *pointer = *_list;
- int j;
- for(j = 0 ; j < size - 1 /* && pointer->next*/; j++) // here's without additional protect condition!!!
- {
- if(strcmp(pointer->title, pointer->next->title) > 0)
- listSwapWithNext(_list, j);
- printf("# %d %d\n", i, j);
- pointer = pointer->next;
- }
- printf("\n");
- }
- return 0;
- }
- int listPrint(node_t **_list)
- {
- node_t *pointer = *_list;
- for(int i = 0; pointer != NULL; i++)
- {
- printf("%d.\t%s\t%#p\t%#p\n", i, pointer->title, pointer, pointer->next);
- pointer = pointer->next;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement