Created
June 8, 2011 01:26
-
-
Save ciembor/1013600 to your computer and use it in GitHub Desktop.
ASD, listy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| W implementacji wskaźnikowej dana jest lista pojedynczo wiązana o parzystej liczbie elementów. | |
| Zero też jest liczbą parzystą. Elementy danej listy POPRZESTAWIAC w ten sposób, | |
| zeby na początku znalazły się elementy najbardziej skrajne | |
| - pierwszy z ostatnim, następnie drugi z przedostatnim itd. | |
| */ | |
| #include<stdio.h> | |
| #include<stdlib.h> | |
| typedef struct LISTA { | |
| int w; | |
| struct LISTA *n; | |
| }element; | |
| int main() | |
| { | |
| element *pierwszy, *aktualny, *nowy, *ostatni, *a, *temp; | |
| int i; | |
| int pole; | |
| int tmp = 1; | |
| int parzyste = 1; | |
| // wczytujemy dane | |
| printf("Podaj parzystą ilość elementów listy (0 przerywa wczytywanie): \n"); | |
| scanf("%d", &pole); | |
| if(pole != 0) | |
| { | |
| pierwszy = malloc(sizeof(element)); | |
| pierwszy->w = pole; | |
| pierwszy->n = NULL; | |
| parzyste = 0; | |
| while(pole != 0) | |
| { | |
| scanf("%d",&pole); | |
| if (pole == 0) | |
| { | |
| if (parzyste == 0) | |
| { | |
| printf("Ilość elementów na liście nie jest parzysta.\n"); | |
| return 1; | |
| } | |
| break; | |
| } | |
| parzyste ? (parzyste = 0) : (parzyste = 1); | |
| aktualny = pierwszy; | |
| while(aktualny->n != NULL) | |
| { | |
| aktualny = aktualny->n; | |
| } | |
| nowy = malloc(sizeof(element)); | |
| nowy->w = pole; | |
| nowy->n = NULL; | |
| aktualny->n = nowy; | |
| } | |
| } | |
| // wypisujemy elementy | |
| printf("------\n"); | |
| i = 0; | |
| aktualny = pierwszy; | |
| while(aktualny != NULL) | |
| { | |
| i++; | |
| printf("%d. ", i); | |
| printf("%d \n", aktualny->w); | |
| aktualny = aktualny->n; | |
| } | |
| // iterujemy po kolejnych elementach listy | |
| aktualny = pierwszy; | |
| while(aktualny != NULL) | |
| { | |
| // przechodzimy na koniec listy | |
| a = aktualny; | |
| while(a->n->n != NULL) | |
| { | |
| a = a->n; | |
| } | |
| // podnosimy ostatni element | |
| ostatni = a->n; | |
| a->n = NULL; | |
| // wstawiamy podniesiony element we właściwym miejscu | |
| temp = aktualny->n; | |
| aktualny->n = ostatni; | |
| ostatni->n = temp; | |
| aktualny = temp; | |
| } | |
| // wypisujemy elementy | |
| printf("------\n"); | |
| i = 0; | |
| aktualny = pierwszy; | |
| while(aktualny != NULL) | |
| { | |
| i++; | |
| printf("%d. ", i); | |
| printf("%d \n", aktualny->w); | |
| aktualny = aktualny->n; | |
| } | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment