• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wskazniki-lista dwukierunkowa

VPS Starter Arubacloud
0 głosów
141 wizyt
pytanie zadane 27 września 2018 w C i C++ przez KaRoLiNakk Nowicjusz (160 p.)

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;
}

 

komentarz 27 września 2018 przez RafalS VIP (122,820 p.)
To nie Twoj kod i masz go zmodyfikowac? Wiesz na czym polega lista tylko nie wieesz jak to napisac w C++?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 291 wizyt
pytanie zadane 2 listopada 2017 w C i C++ przez Kasia Nowicjusz (230 p.)
0 głosów
1 odpowiedź 491 wizyt
pytanie zadane 18 czerwca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 226 wizyt
pytanie zadane 26 maja 2018 w C i C++ przez Roman1212 Początkujący (460 p.)

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...