witam,
Kompletnie nie wiem jak zabrać się za tą listę. proszę o jakieś wskazówki/
Do napisania jest funkcja która zamienia poczatek a końcem i druga ktora usuwa osoby strasze o jakims okreslonym wieku.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 30
//usuwa strasze osoby i zwraca liczbe osob po ususnieciu.
//zamienia pierwsza pozycje z druga/
struct Dane
{
char Imie[MAXLEN];
char Nazwisko[MAXLEN];
int RokUr;
};
struct Element
{
struct Dane dane;
struct Element *Poprz;
struct Element *Nast;
};
struct Lista
{
struct Element *Poczatek;
struct Element *Koniec;
int Rozmiar;
};
void DrukujDane(struct Dane dn) {
printf("%s %s, rok ur: %d\n", dn.Imie, dn.Nazwisko, dn.RokUr);
}
void Drukuj(struct Lista *lst) {
struct Element *p;
//p = lst->Poczatek;
//while (p != NULL) {
// DrukujDane(p->dane);
// p = p->Nast;
//}
for (p = lst->Poczatek; p != NULL; p = p->Nast)
DrukujDane(p->dane);
printf("=== Liczba elementow: %d ====\n", lst->Rozmiar);
}
void DodajPoczatek(struct Lista* lst, struct Dane dn) {
struct Element *nel;
nel = (struct Element*)malloc(sizeof(struct Element));
//(*nel).dane = dn;
nel->dane = dn;
if (lst->Poczatek == NULL) {
//lista pusta
lst->Poczatek = nel;
lst->Koniec = nel;
nel->Poprz = NULL;
nel->Nast = NULL;
}
else {
//lista niepusta
nel->Poprz = NULL;
nel->Nast = lst->Poczatek;
lst->Poczatek->Poprz = nel;
lst->Poczatek = nel;
}
lst->Rozmiar++;
}
void DodajKoniec(struct Lista* lst, struct Dane dn) {
struct Element *nel;
nel = (struct Element*)malloc(sizeof(struct Element));
nel->dane = dn;
if (lst->Poczatek == NULL) {
lst->Poczatek = nel;
lst->Koniec = nel;
nel->Poprz = NULL;
nel->Nast = NULL;
}
else {
nel->Nast = NULL;
nel->Poprz = lst->Koniec;
lst->Koniec->Nast = nel;
lst->Koniec = nel;
}
lst->Rozmiar++;
}
void ZamienPoczatekKoniec(struct Element *lst,struct Dane dn){
struct Element *temp;
temp=(struct Element*)malloc(sizeof(struct Element));
temp=lst->Koniec;
temp->Nast=lst->Koniec->Nast;
temp->Poprz=lst->Koniec->Poprz;
lst-> Koniec->Nast=lst->Poczatek->Nast;
lst->Koniec->Poprz=lst->Poczatek->Poprz;
lst->Poczatek->Poprz=temp->Poprz;
lst->Poczatek->Nast=temp->Nast;
}
struct Element* ZnajdzNazwisko(struct Lista* lst, char *Nazwisko) {
struct Element *p;
for (p = lst->Poczatek; p != NULL; p = p->Nast)
if (strcmp(p->dane.Nazwisko, Nazwisko) == 0)
break;
return p;
}
void UsunNajstarszy(struct Lista *lst,int *RokUr){
struct Element *p;
for (p = lst->Poczatek; p != NULL; p = p->Nast){
if(RokUr>70)
UsunElement(*lst,p);
}
lst->Rozmiar--;
return 0;
}
void UsunElement(struct Lista* lst, struct Element* pBiezacy) {
if (pBiezacy->Poprz == NULL)
lst->Poczatek = pBiezacy->Nast;
else
pBiezacy->Poprz->Nast = pBiezacy->Nast;
if (pBiezacy->Nast == NULL)
lst->Koniec = pBiezacy->Poprz;
else
pBiezacy->Nast->Poprz = pBiezacy->Poprz;
free(pBiezacy);
lst->Rozmiar--;
}
void UsunKoniec(struct Lista* lst) {
if (lst->Koniec == NULL)
return;
UsunElement(lst, lst->Koniec);
}
void UsunPoczatek(struct Lista* lst) {
if (lst->Poczatek == NULL)
return;
UsunElement(lst, lst->Poczatek);
}
void UsunWszystko(struct Lista* lst) {
while (lst->Poczatek != NULL)
UsunElement(lst, lst->Poczatek);
}
int main()
{
char Bufor[MAXLEN];
struct Lista KierInform;
struct Lista KierKosmit;
struct Element* pEl;
KierInform.Poczatek = NULL;
KierInform.Koniec = NULL;
KierInform.Rozmiar = 0;
struct Dane dane = { "Jan", "Kowalski",1990 };
DodajPoczatek(&KierInform, dane);
dane = (struct Dane) { "Marcin", "Wolski", 1980 };
DodajPoczatek(&KierInform, dane);
Drukuj(&KierInform);
dane = (struct Dane) { "Szymon", "Stepniak", 1970 };
DodajPoczatek(&KierInform, dane);
Drukuj(&KierInform);
dane = (struct Dane) { "Anna", "Walczak", 1999 };
DodajKoniec(&KierInform, dane);
Drukuj(&KierInform);
printf("Podaj nazwisko: ");
scanf("%29s", Bufor);
pEl = ZnajdzNazwisko(&KierInform, Bufor);
if (pEl == NULL)
printf("Nie znaleziono.\n");
else {
//DrukujDane(pEl->dane);
UsunElement(&KierInform, pEl);
Drukuj(&KierInform);
}
UsunWszystko(&KierInform);
Drukuj(&KierInform);
return 0;
}