Witam,
Przedstawiam jeden z moich programów. Który możliwe, że się komuś przyda;)
Przedstawia on działanie Stosu
Początkowo jest implementowany stos o rozmiarze 4.
Podczas dodawania 4 elementu następuje powiększenie stosu do rozmiaru 8, następnie 12 itd.
Jeśli skorzystałeś z tego postu, oddaj głos w ankiecie.
Dziękuje :-)
Klasa stos.h
int *backup;
class stack
{
public:
void push(int a); // dodanie elementu do stosu
int pop(); // usunięcie elementu ze stosu
void clear(); // czyszczenie stosu
int getStackSize(); //pokazuje rozmiar stosu
stack(); // wywolanie stosu (kostruktor)
stack(int size); // wywolanie stosu (kostruktor z zadanym rozmiarem stosu)
stack(stack& s); // konstruktor kopiowania
~stack(); // destruktor
stack& operator=(stack& s); // operator kopiowania
int update(); // funkcja powiększająca stos
void show(); // wyświetlanie stosu
private:
int size; // rozmiar stosu
int top; // pozycja ostatniego elementu
int* dane; // stos
};
Main.cpp
#include <iostream>
#include <windows.h>
#include "stos.h"
using namespace std;
void gotoxy(int x, int y) // umieszcza kursor na wybranej pozycji
{
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int main()
{
int liczba;
int i,key,choise;
stack stos; // deklaracja zmiennej danej klasy (poprzez tą zmienna odwołujemy sie do danej klasy)
stack(); // rozpoczęcie stosu
key=1;
while(key!=0)
{
gotoxy(30,1);
cout<<"Zmiany w widoku stosu sa realizowane z opoznieniem.";
gotoxy(1,3);
cout<<"Co chcesz zrobic?\n";
gotoxy(3,4);
cout<<"1-Push()\n";
gotoxy(3,5);
cout<<"2-Pop()\n";
gotoxy(3,6);
cout<<"3-Clear()\n";
gotoxy(3,7);
cout<<"4-Size\n";
// wariany w menu które sa realizowane w switch ponizej
for (i=1;i<25;i++)
{
gotoxy(25,i);
cout<<"|";
}
gotoxy(8,8);
cin>>choise;
switch(choise)
{
case 1:
gotoxy(30,5);
cout<<"Podaj liczbe która chcesz dodać do stosu.";
gotoxy(30,6);
cout<<"A= ";
cin>>liczba;
gotoxy(30,7);
stos.push(liczba);
break;
case 2:
stos.pop();
break;
case 3:
stos.clear();
break;
case 4:
stos.getStackSize();
break;
}
stos.show();
gotoxy(30,8);
cout<<"Kontynuowac? 1-tak 0-nie :";cin>>key;
system("cls");
stos.show();
}
stos.show();
stos.~stack();
cout<<"\n\n";
system("pause"); // pauza systemowa
return 0;
}
//**********************************************************************
void stack::push(int a)
{
this->dane[top]=a; // dodawanie liczby a do stosu
this->top++;
if(top==size)
update();
cout<<"Dodano liczbe "<<a<<" do stosu.\n";
}
//**********************************************************************
int stack::pop()
{
if (top>0) // usuwanie ostatniej liczby ze stosu jesli jest taka mozliwosc
{
this->top--;
gotoxy(30,5);
cout<<"Usunieto ostatnia liczbe ze stosu.\n";
}
else
{
gotoxy(30,5);
cout<<"Brak elementów do usuniecia.\n";
}
}
//**********************************************************************
void stack::clear()
{
this->top=0; // czyszczenie stosu
gotoxy(30,5);
cout<<"Stos wyczyszczono.";
}
//**********************************************************************
void stack::show() // Fukcja wypisująca stos oraz podaje ile liczb jest w stosie
{
int j=top;
int t=16;
gotoxy(35,14);cout<<"Na stosie znajduje sie "<<top<<" liczb.";
gotoxy(35,15);cout<<"Te liczby to:";
for(int i=0;i<j;i++)
{
gotoxy(45,t);
cout<<dane[i];
t++;
}
}
//**********************************************************************
stack::stack()
{
this->top=0; // rozpoczęcie stosu i przypisanie zmiennej top wartosci zero
int* dane = new int[4];
this->size=4;
}
//**********************************************************************
stack::~stack()
{
delete[] dane;
}
//**********************************************************************
stack::stack(int Nsize)
{
this->top=0; // rozpoczęcie stosu i przypisanie zmiennej top wartosci zero
dane = new int[Nsize];
size = Nsize;
}
//**********************************************************************
stack::stack(stack& s)
{
this-> dane = new int [s.size];
for (int i=0;i<s.size; i++)
this->dane[i] = s.dane[i];
this->size = s.size;
cout<<"Stos został sklonowany.\n";
}
//**********************************************************************
stack& stack::operator=(stack& s)
{
delete[] dane;
this->dane= new int[s.size];
for (int i=0;i<s.size; i++)
this->dane[i] = s.dane[i];
this->size = s.size;
}
//**********************************************************************
int stack::getStackSize()
{
gotoxy(30,5);
cout<<"Stos ma rozmiar "<<size<<" wyrazów.";
}
//**********************************************************************
int stack::update()
{int i;
backup= new int[size];
for(i=0;i<size;i++)
backup[i]=dane[i];
delete[] dane;
size+=4;
this->dane= new int[size];
for(i=0;i<size;i++)
dane[i]=backup[i];
delete[] backup;
gotoxy(30,10);
cout<<"Stos zostal powiekszony.";
}