Skip to content

Instantly share code, notes, and snippets.

@ciembor
Created June 8, 2011 01:26
Show Gist options
  • Select an option

  • Save ciembor/1013600 to your computer and use it in GitHub Desktop.

Select an option

Save ciembor/1013600 to your computer and use it in GitHub Desktop.
ASD, listy
/*
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