• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dodawanie do listy sort

VPS Starter Arubacloud
0 głosów
707 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez Jejkej Obywatel (1,030 p.)
edycja 18 czerwca 2015 przez Jejkej

Mam pytanie, jak zrobić prostą funkcję, która doda elementy do listy, sortując je rosnąco (pierwszy element wrzuca, następnie wrzuca albo przed, jeżeli mniejszy, albo po, jeżeli jest większy).

struct node{
int val;
node *next;
};

int main()
{
node *Head = NULL;
}

 

Funkcja miałaby wyglądać mniej-więcej tak:

void add(node *&Head, int x)
{
	node *p = new node;
        p->v=x;
	if (Head== NULL || x <= (Head->v))
	{
		p->next = Head;
		Head = p;
	}
	else
	{
		node *p1;
		p1 = Head;
		while (x > (p1->v))                // tutaj chcę ustawić wskaźnik p1 na element, który jest mniejszy bądz równy x
		{
			if(p1->next = NULL) break;
			p1 = p1->next;
		}
		if (p1->next == NULL)
		{
			p->next = p1->next;
			p1->next = p;
		}
		if (p1 != NULL)
		{

		}
	}
}

 

Nie jestem w stanie go dokończyć ponieważ cały czas wyskakuje mi błąd kompilacji:Unhandled exception at 0x01204C09 in zad.exe: 0xC0000005: Access violation reading location 0x00000008 i wskazuje na liniję 14 (while (x > (p1->v)) Czyli początek pętli while. Nie wiem w czym tkwi problem.

 

2 odpowiedzi

+1 głos
odpowiedź 18 czerwca 2015 przez draghan VIP (106,230 p.)
Moje pytanie: potrzebujesz uporządkowanej listy, czy po prostu bawisz się w implementację tego? :)
komentarz 18 czerwca 2015 przez Jejkej Obywatel (1,030 p.)
Potrzebuje uporządkować w ten sposób.
komentarz 18 czerwca 2015 przez draghan VIP (106,230 p.)

Okej, to spróbujmy. U mnie Twój kod nie wywołuje problemów na etapie kompilacji.

Tylko takie pytanie: czy celem zamierzonym jest podanie do funkcji add() wskaźnika do referencji?

void add(node *&Head, int x)

komentarz 18 czerwca 2015 przez Jejkej Obywatel (1,030 p.)
tak, jak najbardziej zamierzonym.
0 głosów
odpowiedź 24 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
Pobierasz referencję do wskaźnika i w pierwszej linice go zmieniasz więc nie masz zainicjalizowanego pola next i wychodzi gdzieś poza liste, a że próbujesz tam odczytać to wywala segfaulta.

Podobne pytania

0 głosów
1 odpowiedź 1,005 wizyt
0 głosów
1 odpowiedź 217 wizyt
0 głosów
1 odpowiedź 2,435 wizyt
pytanie zadane 18 lutego 2017 w C# przez Rout Bywalec (2,350 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,309 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...