Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- // ------------ DEFINIOWANIE STRUKTURY LISTY ---------------------- //
- typedef struct lista
- {
- struct lista *next, *prev;
- char *slowo;
- }lista;
- // ------------ TWORZENIE NOWYCH LIST ---------------------- //
- lista *test = NULL;
- lista *test2 = NULL;
- lista *test3 = NULL;
- // ------------ WSTAWIANIE ---------------------- //
- void wstaw(char* slowko, lista **head)
- {
- lista *nowe = (lista*)malloc(sizeof(lista));// tymczasowa zmienna pomocnicza,
- //do której przypisany zostanie adres pierwszego elementu listy
- nowe->slowo = slowko; //zamieniamy slowo na nasze slowko
- nowe->next = *head; //zamieniamy nexta na starego heada
- *head = nowe;
- //nowe->prev = NULL;
- }
- // ------------ DRUKOWANIE ---------------------- //
- void drukuj(lista *part)
- {
- while(part != NULL)
- {
- printf("%s ", part->slowo);
- part=part->next;
- }
- printf("\n\n");
- }
- lista* szukaj(char* slowko, lista *part)
- {
- while(part != NULL && part->slowo != slowko)
- {
- part=part->next;
- }
- return part;
- }
- // ------------ USUWANIE WEZLA ---------------------- //
- void usun(char *slowko, lista **head)
- {
- lista* temp = *head;
- lista* usun = NULL;
- int licznik=0;
- while(temp != NULL)
- {
- if(temp->slowo != slowko)
- {
- usun=temp;
- temp=temp->next;
- licznik++;
- }
- else
- {
- if(licznik==0)
- {
- *head = temp->next;
- return;
- }
- else
- {
- usun->next = temp->next;
- free(temp);
- return;
- }
- }
- }
- return;
- }
- /*
- void bez_powt(lista *head)
- {
- lista *pierwszy, *drugi, *usun;
- pierwszy = head;
- while(pierwszy != NULL && pierwszy->next != NULL)
- {
- drugi = pierwszy;
- while(drugi->next != NULL)
- {
- if(pierwszy->slowo == drugi->next->slowo)
- {
- usun = drugi->next;
- drugi->next = drugi->next->next;
- free(usun);
- }
- else
- drugi=drugi->next;
- }
- pierwszy=pierwszy->next;
- }
- }
- */
- // ------------ BEZ POWTORZEN ---------------------- //
- lista* bezpowtorzen(lista *oryginal){
- lista *head = NULL;
- while(oryginal != NULL)
- {
- wstaw(oryginal->slowo, &head);
- oryginal=oryginal->next;
- }
- lista *pierwszy, *drugi, *duplikat, *adrespowrotny;
- pierwszy = head;
- adrespowrotny = head;
- //Sprawdzamy elementy jeden po drugim
- while(pierwszy != NULL && pierwszy->next != NULL)
- {
- drugi = pierwszy;
- //Porównujemy element z reszta elementow
- while(drugi->next != NULL)
- {
- //Jesli kopia to ja kasujemy
- if(pierwszy->slowo == drugi->next->slowo)
- {
- duplikat = drugi->next;
- drugi->next = drugi->next->next;
- free(duplikat);
- }
- else
- {
- drugi=drugi->next;
- }
- }
- pierwszy=pierwszy->next;
- }
- printf("\nKopia bez powtorzen: ");
- drukuj(adrespowrotny);
- return adrespowrotny;
- }
- // ------------ SCALANIE LIST ---------------------- //
- void scal(lista** list1, lista** list2, lista** list3)
- {
- lista *tmp;
- *list3 = *list1;
- tmp = *list3;
- while(tmp->next != NULL){
- tmp=tmp->next;
- }
- tmp->next = *list2;
- (*list2)->prev = tmp;
- *list1 = NULL;
- *list2 = NULL;
- }
- // ------------ KASOWANIE LISTY ---------------------- //
- void kasuj(lista** head){
- lista* tmp = *head;
- lista *t;
- while(tmp != NULL){
- t = tmp->next;
- free(tmp);
- tmp = t;
- }
- *head = NULL;
- printf("Lista zostala usunieta i pamiec zwolniona \n");
- }
- int main()
- {
- wstaw("reka", &test);
- wstaw("noga", &test);
- wstaw("posladek", &test);
- wstaw("posladek", &test);
- wstaw("klata", &test);
- wstaw("noga", &test);
- wstaw("reka", &test);
- wstaw("reka", &test2);
- wstaw("ogon", &test2);
- wstaw("posladek", &test2);
- wstaw("brzuch", &test2);
- printf("Cala lista 1:\n");
- drukuj(test);
- printf("\n\nLista 1 bez klaty:\n");
- usun("klata", &test);
- drukuj(test);
- printf("\n\nLista 1 po usunieciu klaty z polowa ciala (bez powtorzen kopia):\n");
- bezpowtorzen(test);
- printf("Nienaruszony oryginal: ");
- drukuj(test);
- printf("\n\nLista 1 usuniecie:\n");
- kasuj(&test);
- drukuj(test);
- wstaw("klata", &test);
- wstaw("glowa", &test);
- wstaw("noga", &test);
- /*
- printf("Lista 1 po usunieciu klaty z polowa ciala (bez powtorzen):\n");
- bez_powt(test);
- drukuj(test);
- */
- printf("\nScalamy liste1 i liste2 w liste3 : \n\n");
- printf("Lista 1: ");
- drukuj(test);
- printf("Lista 2: ");
- drukuj(test2);
- scal(&test, &test2, &test3);
- printf("Lista 3: ");
- drukuj(test3);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement