Tworzenie listy - pierwsze kroki

Tworzenie listy - pierwsze kroki

Wątek przeniesiony 2014-03-26 17:08 z C/C++ przez ŁF.

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

Witam! Napisalem cos takiegie i kompletnie nie mam pojecia czemu to nie dziala, po prostu program sie wysypuje.

Kopiuj
 #include <iostream>
#include <cstdio>
using namespace std;


struct wsk{
	int value;
	wsk * next;
	wsk();
};
wsk::wsk(){
	next = 0;
}
void add(wsk * root, int k)
{

	wsk * temp = root;
	wsk * cur = new wsk;
	cur->value = k;
	if(root == 0)
	{
		cur->next = root->next;
		root = cur;
	}
	
}
void writeList(wsk * root)
{
	wsk * temp = root;
	while(temp!=0)
	{
		cout<<temp->value<<" ";
		temp = temp->next;
	}
}


int main()
{
	wsk * root = new wsk;
	root = 0;
	add(root,4);
	getchar();
	return 0;
}

na razie jest to prowizorka, dodawanie jak root jest pusty ( root to pierwszy element w mojej liscie).

  • Rejestracja: dni
  • Ostatnio: dni
0

http://i.imgur.com/cgJILCr.png czas na debuggera może

odwołujesz się​ do root, który jest pusty

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

no ale przecież na poczatku musi wskazywać na adres zerowy jak nic w niej nie ma nie?

  • Rejestracja: dni
  • Ostatnio: dni
0

http://ideone.com/Bx0cYA

może to wyjaśni więcej

http://ideone.com/Bx0cYA

Proxima przecież on sprawdził czy root jest pusty, i mimo to odwołał się do niego

teraz jest Twój

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

ja nie rozuemiem co u mnie jest nie tak, no przeciez ustawiam adres na wartosc zerowa, czyli NULL, a potem w funkcji ustawiam moj wskaznik root na cur, czyli od tego moment on na cos wskazuje..? no bo walsnie jak jest null to chce zeby pokazywal mi na cur i to on teraz bedzie pierwszy?

  • Rejestracja: dni
  • Ostatnio: dni
PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Pomorskie (Stare Kabaty)
1
Kopiuj
#include <iostream>
#include <cstdio>
using namespace std;
 
 
struct wsk
{
    int value;
    wsk * next;
    wsk();
    wsk(int x);
    void add(int z);
    wsk* r_addr()
    {
		return next;
	}
};
wsk::wsk()
{
    next = 0;
    value = 0;
}
wsk::wsk(int x)
{
	next = 0;
	value = x;
}
void add(wsk* x,int k)
{ 
	x->next = new wsk(k);
}
void writeList(wsk * root)
{
    wsk * temp = root;
    while(temp!=0)
    {
        cout<<temp->value<<" ";
        temp = temp->next;
    }
}
int main()
{
    wsk * root = new wsk;
    add(root,5);
    add(root->r_addr(),567);
    add(root->r_addr()->r_addr(),56);
    add(root->r_addr()->r_addr()->r_addr(),23);
    writeList(root);
    getchar();
    return 0;
}
 

Tak na szybko, rozwiązanie brzydkie ale działa, może Ci to troche rozjaśni budowe struktury takiej listy.
Tzn. root jest ogonem , dodajesz nastepny element poprzez zwrot wskaznika na następce roota, potem na następce następcy, i tak to leci.

L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 116
0

Oczywiście gotowe i dobrze działające rozwiązania typu #include <list> jest nie wskazane?

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.