Помогите переделать вместо стека двухсвязный список
Добавлено: 13 май 2014, 12:27
Код: Выделить всё
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int end=0;
class t{
public:
wchar_t *sim;
t(){};
template <class Stype> void T_L_at_SHell(Stype &line,Stype &count);
t(wchar_t *sym){
sim=sym;
}
wchar_t *GetLine(){
return sim;
}
};
int n; // Глобальная переменная
class Stack
{
protected:
int *stck; // Динамический массив
int tos; // Текущий номер элемента
int length;// Размер стека = размер динамического массива
public:
Stack(int size); // Конструктор
~Stack(){delete [] stck;} //Деструктор
void push(int item); // Поместить в стек
int pop(); //Извлечь из стека
int GetLen(){return length;} // Получить значение размера стека
int GetCurrent() {return tos;} // Получить текущую позицию в стеке
};
Stack a(10); // Создание объекта класса стека размером 10 элементов
// Конструктор стека
Stack :: Stack(int size)
{
stck = new int [size]; // Создание динамического массива
if(!stck) // Если не выделена память под массив
{
ShowMessage("Unable to create STACK");
return;
}
length=size;
tos=0; // Текущая позиция в стеке при его создании равна 0
}
// Помещение объека в стек
void Stack:: push(int item)
{
if(tos==length) // Если текущий номер равен длине стеке
{
ShowMessage("Стек полон");
return;
}
stck[tos] = item; // Поместить значение в стек
tos++; // Инкремент номера
}
int Stack :: pop() // Извлечение объекта из стека
{
if(tos==0) // Если текущая позиция =0, стек пуст
{
ShowMessage("STACK is empty");
return 0;
}
tos--;
return stck[tos]; // Извлечь последнее значение
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int chislo=Edit1->Text.ToIntDef(5)+1;
AnsiString s;
int *prov1;
prov1 = new int [100];
StringGrid1->ColCount=chislo;
for(int i=0; i<chislo; i++){
prov1[i] = random(200)-100;
StringGrid1->Cells[i+1][1]=prov1[i];
}
if(!prov1[0]=='\0'){
delete []prov1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int num=StrToInt(Edit1->Text);
a.push(num); // Поместить в стек
lPush->Caption="Введенный элемент "+ IntToStr(num);
lCurrent->Caption="Текущий номер = "+ IntToStr(a.GetCurrent());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int num=a.pop();// Извлечь число из стека
lPop->Caption="Считанный элемент "+IntToStr(num);
lCurrent->Caption="Текущий номер = "+ IntToStr(a.GetCurrent());
}
//---------------------------------------------------------------------------