Witam, mam problem w kodzie. Podejrzewam, że chodzi o funkcję used. Wygląda na to, że operuję nie na tym co trzeba.
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <time.h>
using namespace std;
//Struktura
typedef struct Stos
{
int data;
Stos * next;
}*StosPtr;
//init
StosPtr init(StosPtr &C)
{
int ile,liczba=rand() %51;
C = new Stos;
C->next = NULL;
C->data = liczba;
//
cout << "Pierwszy element zostal stworzony z data " << liczba<< "." << endl;
cout << "Ile struktur mam jeszcze wygenerowac? ";
cin >> ile;
cout << "" << endl;
//
for (int i = 0; i < ile; i++)
{
liczba = rand() % 51;
cout << "Dodano nastepne powiazanie, data to " << liczba << "." << endl;
Sleep(100);
StosPtr obecny, nowy = new Stos;
nowy->next = NULL;
nowy->data = liczba;
if (C != NULL)
{
obecny = C;
C = nowy;
C->next = obecny;
}
}
//
cout << "Init zostalo wykonane!";
Sleep(1000);
return C;
}
//Push
void push(StosPtr head, int liczba)
{
StosPtr obecny, nowy = new Stos;
nowy->next = NULL;
nowy->data = liczba;
if (head != NULL)
{
obecny = head;
head = nowy;
head->next = obecny;
}
else
{
head = nowy;
}
}
//Pop
void pop(StosPtr &head)
{
if (head == NULL)
{
cout << " Nic nie zdejmiesz bo nic nie ma.";
Sleep(500);
}
else
{
StosPtr del;
del = head;
head = head->next;
delete head;
}
}
//Empty
void empty(StosPtr head)
{
if (head == NULL)
{
cout << "Stos jest pusty!";
Sleep(700);
}
else
{
cout << "Stos nie jest pusty!";
Sleep(700);
}
}
//top
void top(StosPtr head)
{
if (head == NULL)
{
cout << "Stos jest pusty!";
Sleep(500);
}
else
{
cout << "Liczba znajdujaca sie najwyzej to:" << head->data;
Sleep(500);
}
}
//destroy
void destroy(StosPtr &head)
{
if (head != NULL)
{
int licznik = 0;
while (head->next != NULL)
{
licznik++;
head = head->next;
}
if (licznik = 0)
{
cout << "Stos jest pusty";
Sleep(700);
}
else
{
for (int j = 0; j < licznik; j++)
{
cout << "Element: " << head->data << " zostal usuniety!" << endl;
pop(head);
}
}
}
}
//exit
void exit()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
cout << "Koniec programu!";
Sleep(2000);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
}
//used
StosPtr used(StosPtr &A, StosPtr &B)
{
StosPtr usedd;
cout << "Na ktorym stosie chcesz dzialac? 1 lub 2." << endl;
int stos;
cin >> stos;
if (stos == 1)
{
usedd = A;
}
else
{
usedd = B;
}
return usedd;
}
//main
int main()
{
srand(time(NULL));
StosPtr A=NULL, B=NULL, C=NULL;
int liczba, wybor;
do
{
system("CLS");
cout << "1. Init" << endl;
cout << "2. Push" << endl;
cout << "3. Pop" << endl;
cout << "4. Top" << endl;
cout << "5. Empty" << endl;
cout << "6. Destroy" << endl;
cout << "0. Exit" << endl;
cout << "Co wybierasz?" << endl;
cin >> wybor;
switch (wybor)
{
case 1://init
{
/*
cout << "Stos 1 czy 2?" << endl;
int wyborek;
cin >> wyborek;
if (wyborek == 1)
{
A = init(A);
}
else
{
B = init(B);
}
//Tak dziala
*/
C = used(A, B);
init(C);
break;
}
case 2://push
{
C = used(A, B);
cout << "Podaj liczbe: ";
cin >> liczba;
push(C,liczba);
break;
}
case 3://pop
{
C = used(A, B);
pop(C);
break;
}
case 4://top
{
C = used(A, B);
top(C);
break;
}
case 5://empty
{
C = used(A, B);
empty(C);
break;
}
case 6://destroy
{
C = used(A, B);
destroy(C);
break;
}
case 0://exit
{
exit();
}
default:
cout << "POMYLKA!";
Sleep(2000);
break;
}
} while (wybor != 0);
return 0;
}
Z góry dzięki za pomoc :).