Witam
Jestem początkującym programistą. Proszę o sprawdzenie kodu w poszukiwaniu ewentualnych błędów oraz o podpowiedź jak zrobić dynamiczne przydzielanie pamięci w stosie lub w kolejce?
#include <cstdlib>
#include <iostream>
using namespace std;
struct stos
{
int max;
int w;
int Tab[10];
};
struct kolejka
{
int max;
int p, k;
int tab[10];
};
void starts(stos*s)
{
s->max=10;
s->w=-1;
}
void startk(kolejka*Q)
{
Q->max=10;
Q->p=-1;
Q->k=-1;
}
void attach(kolejka*Q, int x)
{
if((Q->p == 0 && Q->k == Q->max-1)||(Q->k == Q->p-1))
cout << " Kolejka jest pelna. Nie moge dodac " << x << endl;
else
{
if(Q->k < Q->max-1)
{
Q->k++;
Q->tab[Q->k] = x;
if(Q->p == -1) { Q->p++; }
}
else
{
Q->k = 0;
Q->tab[Q->k] = x;
}
}
}
void push(stos*s, int x)
{
if(s->w==s->max-1)
cout <<" Stos pelny\n";
else
{
s->w++;
s->Tab[s->w]=x;
}
}
void dattach(kolejka*Q)
{
if (Q->p == -1)
{
cout << " Kolejka jest pusta, nie ma czego usunac.\n ";
}
else
{
cout << " Usunieto element " << Q->tab[Q->p]<<endl;
if (Q->p < Q->max-1)
{
Q->p++;
}
else
{
Q->p=0;
}
if (Q->p == Q->k+1)
{
Q->p = -1;
Q->k = -1;
}
}
}
void pop(stos*s)
{
if(s->w==-1)
{
cout <<" Stos jest pusty\n";
}
else
{
cout <<" Usunieto element " <<s->Tab[s->w] <<endl;
s->w--;
}
}
void wyswietlk(kolejka*Q)
{
if (Q->p == -1)
{
cout << " Kolejka jest pusta.\n ";
}
else
{
int i=Q->p;
do
{
if(i==Q->max)i=0;
cout << Q->tab[i]<< "|";
i++;
}
while (i!=Q->k+1);
}
}
void wyswietls(stos*s)
{
if(s->w==-1)
cout <<" Stos pusty\n";
else
{
cout <<" Elementy stosu: \n";
for (int i=s->w; i>=0; i--)
{
cout <<s->Tab[i] <<endl;
}
}
}
int main(int argc, char *argv[])
{
int wyb=0, wyb2=0;
stos mojstos;
starts(&mojstos);
kolejka mojakolejka;
startk(&mojakolejka);
do
{
cout <<" Wcisnij:\n 1. Jezeli chesz korzystac ze stosu" <<endl
<<" 2. Jezeli chcesz korzystac z kolejki" <<endl
<<" 3. Jezeli chcesz zakonczyc program" <<endl
<<" Jaki jest Twoj wybor: ";
cin >> wyb;
switch (wyb)
{
case 1:
{
do
{
cout <<"\n 1. Dodanie elementu do stosu" <<endl
<<" 2. Usuniecie elementu ze stosu" <<endl
<<" 3. Wydruk elementu struktury" <<endl
<<" 4. Koniec programu"<<endl
<<" 5. Powrot do glownego menu"<<endl
<<" Wybierz co chcesz zrobic: ";
cin >> wyb2;
switch (wyb2)
{
case 1: int x;
cout <<" Jaki element dodac: ";
cin >> x;
push(&mojstos, x);
break;
case 2: pop(&mojstos);
break;
case 3: wyswietls(&mojstos);
break;
case 4: wyb=3; wyb2=5;
break;
case 5: break;
default: cout <<" Nie ma takiej opcji\n";
break;
}
}
while(wyb2 != 5);
break;
}
case 2:
{
do
{
cout <<"\n 1. Dodanie elementu do kolejki" <<endl
<<" 2. Usuniecie elementu z kolejki" <<endl
<<" 3. Wydruk elementu struktury" <<endl
<<" 4. Koniec programu"<<endl
<<" 5. Powrot do glownego menu"<<endl
<<" Wybierz co chcesz zrobic: ";
cin >> wyb2;
switch (wyb2)
{
case 1: int x;
cout <<" Jaki element dodac: ";
cin >> x;
attach(&mojakolejka, x);
break;
case 2: dattach(&mojakolejka);
break;
case 3: wyswietlk(&mojakolejka);
break;
case 4: wyb=3; wyb2=5;
break;
case 5: break;
default: cout <<" Nie ma takiej opcji\n";
break;
}
}
while(wyb2 != 5);
break;
}
case 3: break;
default: cout <<" Nie ma takiej opcji\n";
}
}
while(wyb!=3);
system("PAUSE");
return EXIT_SUCCESS;
}