Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define TRUE 1
- #define FALSE 0
- typedef struct ListaDE ListaDE;
- typedef struct Item Item;
- struct Item {
- int value;
- Item* next;
- };
- struct ListaDE {
- Item* item;
- };
- ListaDE* newListaDE();
- int isEmpty(ListaDE* list);
- int has(int value, ListaDE* list);
- Item* get(int value, ListaDE* list);
- void add(int value, ListaDE* list);
- void delete(int value, ListaDE* list);
- void print(ListaDE* list);
- void freeList(ListaDE* list);
- ListaDE* newListaDE()
- {
- ListaDE* newList = malloc(sizeof(ListaDE));
- newList->item = NULL;
- return newList;
- }
- int isEmpty(ListaDE* list) {
- return list->item == NULL;
- }
- int has(int value, ListaDE* list)
- {
- Item* item = list->item;
- while (item != NULL) {
- if (item->value == value)
- return TRUE;
- item = item->next;
- }
- return FALSE;
- }
- Item* get(int value, ListaDE* list)
- {
- Item* item = list->item;
- while (item != NULL && item->value != value)
- item = item->next;
- return item;
- }
- void add(int value, ListaDE* list)
- {
- if (has(value, list))
- return;
- Item* newItem = malloc(sizeof(Item));
- newItem->value = value;
- newItem->next = NULL;
- if (isEmpty(list)) {
- list->item = newItem;
- return;
- }
- Item *item = list->item;
- if (item->value > value)
- {
- newItem->next = item;
- list->item = newItem;
- return;
- }
- while (item->next != NULL && value > item->next->value)
- item = item->next;
- newItem->next = item->next;
- item->next = newItem;
- }
- void delete(int value, ListaDE* list)
- {
- if (isEmpty(list) || !has(value, list))
- return;
- Item* item = list->item;
- if (item->value == value)
- {
- if (item->next == NULL)
- {
- list->item = NULL;
- }
- else
- {
- list->item = item->next;
- }
- free(item);
- return;
- }
- while(item->next != NULL && item->next->value != value)
- item = item->next;
- Item* itemToBeDeleted = item->next;
- item->next = itemToBeDeleted->next;
- free(itemToBeDeleted);
- }
- void print(ListaDE* list)
- {
- Item* item = list->item;
- while (item != NULL) {
- printf("%d%c", item->value, (item->next == NULL) ? '\n' : ' ');
- item = item->next;
- }
- }
- void freeList(ListaDE* list)
- {
- Item* item = list->item;
- while (item != NULL) {
- Item* next = item->next;
- free(item);
- item = next;
- }
- free(list);
- }
- int main()
- {
- ListaDE* list = newListaDE();
- int value;
- char c;
- while (scanf("%c", &c) != EOF)
- {
- switch (c)
- {
- case 'I':
- scanf("%d", &value);
- add(value, list);
- break;
- case 'R':
- scanf("%d", &value);
- delete(value, list);
- break;
- case 'B':
- scanf("%d", &value);
- if (has(value, list))
- printf("SIM\n");
- else
- printf("NAO\n");
- break;
- case 'L':
- print(list);
- break;
- default:
- break;
- }
- }
- freeList(list);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement