[C] Usuwanie elementów z listy

Nesquik
Użytkownik
Użytkownik
Posty: 410
Rejestracja: 23 lut 2012, o 13:54
Płeć: Kobieta
Lokalizacja: Bielsko-Biała
Podziękował: 25 razy

[C] Usuwanie elementów z listy

Post autor: Nesquik »

Mam tu program który tworzy listę. Na zadanie mam napisac dwie funkcje jedna ma usuwać element pierwszy,a druga ostatni. Działanie programu rozumiem,dlatego proszę o jakieś wskazówki jak to zrobić.

Próbowałam napisać funkcje która usunie ostatni element,mam coś takiego

Kod: Zaznacz cały

void usun_k()
{
struct lista*temp,*temp2;
temp=glowa;
while(temp->nast!=NULL)
temp=temp->nast;
temp->nast=temp2;
free(temp2)
}

ale element ostatni czyli 12 nadal jest,takze coś jest nie tak.

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


struct lista
{
int dane;
struct lista*nast;  //nast -następnik,wsakźnik pokazuje tylko na strukture
};
struct lista*glowa;

void wstaw_p(int x)
{
struct lista*temp;
temp=(struct lista*)malloc(sizeof(struct lista));
temp->dane=x;
temp->nast=glowa->nast;
glowa->nast=temp;
}


void wstaw_k(int x)
{
struct lista*temp,*temp2;
temp2=(struct lista*)malloc(sizeof(struct lista));
temp2->dane=x;
temp2->nast=NULL;
temp=glowa;
while(temp->nast!=NULL)
temp=temp->nast;

temp->nast=temp2;
 }

void wypisz()
{
struct lista*temp;
temp=glowa->nast;
while(temp!=NULL)
 {
  printf(" %d ",temp->dane);
  temp=temp->nast;
 }
 }


main()
{
glowa=(struct lista*)malloc(sizeof(struct lista));
glowa->dane=-1;
glowa->nast=NULL;
wstaw_p(10);
wstaw_p(7);
wstaw_p(13);
wstaw_p(5);
wstaw_k(12);
wypisz();

getch();
return;
}
Ostatnio zmieniony 1 cze 2012, o 22:48 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
zhtk
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 2 kwie 2012, o 10:53
Płeć: Mężczyzna
Lokalizacja: Warszawa
Pomógł: 2 razy

[C] Usuwanie elementów z listy

Post autor: zhtk »

W tej funkcji usuwany jest zawsze obiekt pod adresem NULL... Wynika to z faktu, że zmienna temp przesuwa się po liście, dochodzi do ostatniego elementu, wskazuje na niego, a do temp2 ładujesz następnik czyli NULL. Następnie jest on usuwany...
ODPOWIEDZ