Proszę pomocy, mam to na jutro wykonać, a nie wiem jak. Mam napisany program i ten poniżej działa - musiałam stworzyć liste dwukierunkową, której elementami są wiadomości wprowadzane przez użytkownika. Ale teraz muszę dopisać jeszcze jeden podprogram - użytkownik powinien podać numer porządkowy wiadomości, a mój podprogram odnajduje ją i usuwa. W końcu drukuje listę pozbawioną tej wiadomości. Myślałam jak to napisać i coś się udało, ale możliwe, że są tam jakieś błędy lub wpisuję nie we właściwym miejscu tę część kodu, dlatego nie działa. Tu umieszczam to, co wpisałam:
void UsuwanieWiadomosci(Element *poczatek) {
pElement = k;
element = poczatek;
i = 2;
while ( i < k && element != NULL)
{
element = element->nastepny;
i++;
}
if( i == k )
printf (“Znaleziona %d-a wiadomosc.\n”, k);
else printf(“Lista zawiera mniej niz %d wiadomosci.”, k);
A tu dzialajacy kod, który mam uzupełnić:
#include <stdio.h>
#include "komentarze.h"
struct Element {
struct Element * nastepny;
struct Element * poprzedni;
Wiadomosc * wiadomosc;
};
typedef struct Element Element;
void Menu() {
printf("--------------------\n");
printf("Chcac dodac element do listy wcisnij \t 1\n");
printf("Chcac wydrukowac liste wcisnij \t\t 2\n");
printf("Chcac skonczyc wcisnij \t\t\t Esc.\n");
printf("--------------------\n");
}
Element * Tworzenie() {
Element * element = (Element *)malloc(sizeof(Element));
if (element == NULL) {
printf("Nie udalo sie przydzielic tyle pamieci!\n");
}
element->wiadomosc = PrzypadkowaWiadomosc();
element->nastepny = NULL;
element->poprzedni = NULL;
return element;
}
void Dodawanie(Element **poczatek, Element **koniec) {
if (*poczatek == NULL && *koniec == NULL) {
*poczatek = Tworzenie();
*koniec = *poczatek;
} else {
Element * nowy = Tworzenie();
(*koniec)->nastepny = nowy;
nowy->poprzedni = *koniec;
*koniec = nowy;
}
}
void DrukowacListe(Element *lista) {
printf("---------------------------\n");
int i = 1;
while (lista != NULL) {
printf("Numer wiadomosci w liscie: %d\n", i);
DrukowacWiadomosc(lista->wiadomosc);
lista = lista->nastepny;
i++;
}
printf("---------------------------\n");
}
void UsuwanieListy(Element **poczatek) {
Element * tymczasowy;
while (*poczatek != NULL) {
tymczasowy = *poczatek;
*poczatek = (*poczatek)->nastepny;
free(tymczasowy);
}
}
int main() {
Element * poczatek = NULL, *koniec = NULL;
char x;
Menu();
while ((x = getchar())) {
switch (x) {
case '1':
Dodawanie(&poczatek, &koniec);
Menu();
break;
case '2':
DrukowacListe(poczatek);
Menu();
break;
case '\n':
break;
case 27:
UsuwanieListy(&poczatek);
return 0;
default:
Menu();
}
}
return 0;
}