LIsta jednokierunkowa

0

Witam to jest mój programik listy 1 kierunkowej nie jest jeszcze do końca skończony bo mam problem niby wstawianie nowego
węzła za pomocą funkcji DodajNapoczatek jest poprawne kompiluje się dobrze ale w czasie debugowania jak chce dodaj nowy element to wyskakuje błąd czy ktoś może pomóc ??

#include "stdafx.h"
#include <iostream>
using namespace std;

struct Wezel
{
float dane;
Wezel *nastepny;
};
Wezel *poczatek=NULL;
int DodajNapoczatek(Wezel *poczatek,float dane)
{
Wezel tmp;
tmp=new Wezel;//(Wezel
)malloc(sizeof(Wezel))
if(tmp=NULL)
{
cout<<"brak pamieci!"<<endl;
return 1;
}
tmp->dane=dane;//tutaj wyskakuje błąd podczas działania programu nie wiem czemu :(


tmp->nastepny=poczatek;
poczatek=tmp;
return 0;

}

int dodajzabiezacy(Wezel *biezacy,float dane)
{
Wezel *tmp;
tmp=new Wezel;
if(tmp==NULL)
{
cout<<"brak pamieci"<<endl;
return 1;
}
tmp->dane=dane;//tu wpisanie danych
tmp->nastepny=biezacy->nastepny;
biezacy->nastepny=tmp;
return 0;
}

void usunpoczatek(Wezel *&poczatek)
{
Wezel *tmp;
tmp=poczatek;
poczatek=tmp->nastepny;
delete tmp;//free(tmp)
}

void usunnastepny(Wezel *poprzednik)
{
Wezel *tmp;
tmp=poprzednik->nastepny;
poprzednik->nastepny=tmp->nastepny;
delete tmp;
}

void usunAll(Wezel *&poczatek)
{
Wezel *tmp;
while(poczatek!=NULL)
{
tmp=poczatek;
poczatek=tmp->nastepny;
delete tmp;
}
}
void drukuj(Wezel *poczatek)
{
Wezel tmp;
for(tmp=poczatek;tmp!=NULL;tmp=tmp->nastepny)
{
cout<<"jakas dana : "<<tmp->dane<<endl;
}
}
int _tmain(int argc, _TCHAR
argv[])
{
int zakonczenie=9;

while(zakonczenie!=1)
{
	float war;
	system("CLS");
	cout<<"\nlista jednokierunkowa podaj opcje"<<endl;
	cout<<"1 koniec programu"<<endl;
	cout<<"2 dodanie do listy "<<endl;
	cout<<"3 dodanie kilku losowych el. do listy "<<endl;
	cout<<"4 zdjecie z listy"<<endl;
	cout<<"5 zdjecie kilku el z listy"<<endl;
	cout<<"6 czyszczenie listy"<<endl;
	drukuj(poczatek);
	cout<<": ";
	cin>>zakonczenie;
	switch(zakonczenie)
	{
	case(1):
		cout<<"koniec programu"<<endl;
		system("PAUSE");
		return 0;
	case(2):
		cout<<"jaka wartosc dodac : "; 
		cin>>war;
		DodajNapoczatek(poczatek,war);
		break;
	case(3):
		cout<<"ile dodac : "; 
		cin>>war;
		for(int q=0;q<war;q++)
		{
			
		}
		break;
	case(4):
		if(1)
		{
			cout<<"lista jest pusta\n";system("PAUSE");
		}
		else
			{
			
			}
		break;
	case(5):
		cout<<"ile zdjac : "; 
		cin>>war;
		if(1)
		{
			cout<<"lista jest pusta\n";system("PAUSE");
		}else
		{
			for(int q=1;q<=war;q++)
			{
		
				
			
			}
		}
		break;
	case(6):
		
		break;
	}
}
system("PAUSE");
return 0;

}

0

Bo tu:
if(tmp=NULL)
wpisujesz w tmp NULL'a

0

mam jeszcze 1 pytanko
jak chce wydrukować dane funkcją drukuj i mam taka definicje funkcji to mi działa int DodajNapoczatek(Wezel *&poczatek,float dane)
a jak taka to podczas debugowania się sypie czemu tak jest int DodajNapoczatek(Wezel *poczatek,float dane)

0

Bo przy dodawaniu pierwszego wskaźnik na pierwszy musi się zmienić.
To można zapewnić tylko jeżeli masz Wezel *&poczatek lub Wezel **poczatek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.