wojciech
2006-11-07 15:57:50 UTC
napisałem taki mały programik, który przedstawia działanie listy
dwukierunkowej cyklicznej z wartownikiem, gdzie wartownik to głowa
listy... wyświetla mi zero errorsów podaczas kompilacji ale po
uruchomieniu wyskakuje okienko "Visual Studio Just-In-Time Debugger" i nie
wiem o co chodzi... chyba mam coś źle przy dodawaniu elementów do listy...
może mi ktoś pomóc??
#include "stdafx.h"
#include "malloc.h"
#include "string.h"
typedef struct ELEMENT_LISTY{
char imie[10];
char nazwisko[10];
int wiek;
struct ELEMENT_LISTY *next, *prev;
} el_listy;
void DrukujListe(el_listy *head){
printf("\nLISTA: \n");
el_listy *p;
p = head;
while( p != NULL) {
printf("[%10s %10s %d]\n",p->imie,p->nazwisko,p->wiek);
printf(" ^\n");
printf(" |\n");
printf(" v\n");
p = p -> next;
}
}
void DodajOsobe1(char imie[10],char nazwisko[10],int wiek, el_listy **
head){
el_listy *nowy = NULL;
nowy = (el_listy *)malloc(sizeof(el_listy));
strcpy(nowy -> imie,imie);
strcpy(nowy -> nazwisko,nazwisko);
nowy ->wiek = wiek;
if(*head==NULL)
{
*head = nowy;
(*head)->next = NULL;
(*head)->prev = NULL;
}
else{
nowy -> next = (*head)->next;
(*head) -> next -> prev = nowy;
(*head) ->next =nowy;
nowy->prev = (*head);
}
}
el_listy *Szukaj(int wiek, el_listy **head)
{
el_listy *skoczek;
skoczek = *head;
while(skoczek != NULL)
{
if(wiek == skoczek->wiek)
return skoczek;
skoczek = skoczek->next;
}
return NULL;
}
void Usun(int wiek, el_listy **head)
{
el_listy *szukany = NULL;
szukany = Szukaj(wiek, head);
if(szukany == NULL)
{
printf("Nie znaleziono takiego rekordu!");
return;
}
else
{
printf("Usunalem osobe: %10s %10s
%d\n",szukany->imie,szukany->nazwisko,szukany->wiek);
szukany->prev->next =szukany->next ;
szukany->next->prev=szukany->prev;
szukany->next = NULL;
szukany->prev = NULL;
free(szukany);
}
}
void wczytajDane(el_listy ** head){
FILE *plik;
int wiek, i;
char imie[10];
char nazwisko[10];
plik=fopen("dane_lista.txt","r");
while(!feof(plik)){
fscanf(plik,"%s", &imie);
fscanf(plik,"%s", &nazwisko);
fscanf(plik,"%d", &wiek);
DodajOsobe1(imie,nazwisko,wiek, head);
i++;
}
fclose(plik);
}
int main(void){
el_listy *head = NULL;
wczytajDane(&head);
DrukujListe(head);
Usun(99, &head);
DrukujListe(head);
el_listy * element;
element = Szukaj(99,&head);
if(element != NULL) printf("Znaleziono osobe: %10s %10s
%d\n",element->imie,element->nazwisko,element->wiek);
else printf("Nie znaleziono elementu.\n");
return 0;
}
dwukierunkowej cyklicznej z wartownikiem, gdzie wartownik to głowa
listy... wyświetla mi zero errorsów podaczas kompilacji ale po
uruchomieniu wyskakuje okienko "Visual Studio Just-In-Time Debugger" i nie
wiem o co chodzi... chyba mam coś źle przy dodawaniu elementów do listy...
może mi ktoś pomóc??
#include "stdafx.h"
#include "malloc.h"
#include "string.h"
typedef struct ELEMENT_LISTY{
char imie[10];
char nazwisko[10];
int wiek;
struct ELEMENT_LISTY *next, *prev;
} el_listy;
void DrukujListe(el_listy *head){
printf("\nLISTA: \n");
el_listy *p;
p = head;
while( p != NULL) {
printf("[%10s %10s %d]\n",p->imie,p->nazwisko,p->wiek);
printf(" ^\n");
printf(" |\n");
printf(" v\n");
p = p -> next;
}
}
void DodajOsobe1(char imie[10],char nazwisko[10],int wiek, el_listy **
head){
el_listy *nowy = NULL;
nowy = (el_listy *)malloc(sizeof(el_listy));
strcpy(nowy -> imie,imie);
strcpy(nowy -> nazwisko,nazwisko);
nowy ->wiek = wiek;
if(*head==NULL)
{
*head = nowy;
(*head)->next = NULL;
(*head)->prev = NULL;
}
else{
nowy -> next = (*head)->next;
(*head) -> next -> prev = nowy;
(*head) ->next =nowy;
nowy->prev = (*head);
}
}
el_listy *Szukaj(int wiek, el_listy **head)
{
el_listy *skoczek;
skoczek = *head;
while(skoczek != NULL)
{
if(wiek == skoczek->wiek)
return skoczek;
skoczek = skoczek->next;
}
return NULL;
}
void Usun(int wiek, el_listy **head)
{
el_listy *szukany = NULL;
szukany = Szukaj(wiek, head);
if(szukany == NULL)
{
printf("Nie znaleziono takiego rekordu!");
return;
}
else
{
printf("Usunalem osobe: %10s %10s
%d\n",szukany->imie,szukany->nazwisko,szukany->wiek);
szukany->prev->next =szukany->next ;
szukany->next->prev=szukany->prev;
szukany->next = NULL;
szukany->prev = NULL;
free(szukany);
}
}
void wczytajDane(el_listy ** head){
FILE *plik;
int wiek, i;
char imie[10];
char nazwisko[10];
plik=fopen("dane_lista.txt","r");
while(!feof(plik)){
fscanf(plik,"%s", &imie);
fscanf(plik,"%s", &nazwisko);
fscanf(plik,"%d", &wiek);
DodajOsobe1(imie,nazwisko,wiek, head);
i++;
}
fclose(plik);
}
int main(void){
el_listy *head = NULL;
wczytajDane(&head);
DrukujListe(head);
Usun(99, &head);
DrukujListe(head);
el_listy * element;
element = Szukaj(99,&head);
if(element != NULL) printf("Znaleziono osobe: %10s %10s
%d\n",element->imie,element->nazwisko,element->wiek);
else printf("Nie znaleziono elementu.\n");
return 0;
}