Lista dwukierunkowa. Nie działający podprogram

0

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

Pomijając to co wrzucił kolega nade mną, co to jest to twoje k? Nigdzie w funkcji nie inicjujesz zmiennej k a jej używasz, chyba że ja o czymś nie wiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1