Консультация № 180178
06.10.2010, 10:55
0.00 руб.
0 2 2
Здраствуйте. Помогите реализовать 3 здания по стекам. Я совсем не знаю списков и стеков, поэтому сам сделать не могу.
Задание:
1)Makenull (S) - Делает стек S пустым.
2)Pop (S) - Удаляет элемент из вершины стека.
3)Retrive (p, S)
Использовать код(для оформления) в приложении

Приложение:
// linklist.cpp
// список
#include <iostream>
#include <conio.h>
using namespace std;
///////////////////////////////////////////////////////////
struct link // один элемент списка
{
int data; // некоторые данные
link* next; // указатель на следующую структуру
} ;
///////////////////////////////////////////////////////////
class linklist // список
{
private:
link* first;
public:
linklist ( ) // конструктор без параметров
{ first = NULL; } // первого элемента пока нет
void additem ( int d ); // добавление элемента
void display ( ); // показ данных
void makenull ( ); // функция делает список L пустым и возвращает позицию END(L)
};
///////////////////////////////////////////////////////////
void linklist::additem ( int d ) // добавление элемента
{
link* newlink = new link; // выделяем память
newlink->data = d; // запоминаем данные
newlink->next = first; // запоминаем значение first
first = newlink; // first теперь указывает на новый элемент
}
///////////////////////////////////////////////////////////
void linklist::makenull ()
{
link* current;

while(first)
{
current = first->next;
delete first;
first = current;
}
}
///////////////////////////////////////////////////////////
void linklist::display ( )
{
link* current = first; // начинаем с первого элемента
while( current ) // пока есть данные
{
cout << current->data << endl; // печатаем данные
current = current->next;
}
}

///////////////////////////////////////////////////////////
int main ( )
{ int el,n;
linklist li; // создаем переменную-список
cout<<"input number of element";
cin>>n;

while (n>0)
{
cout<<"input current element";
cin>>el;
li.additem ( el ); // добавляем туда несколько чисел
n--;
}
/* li.additem ( 25 ); // добавляем туда несколько чисел
li.additem ( 36 );
li.additem ( 49 );
li.additem ( 64 ); */

li.display ( ); // показываем список
getch();

li.makenull();
getch();

cout<<"Wiwod spiska \n";
li.display ( ); // показываем список
getch();
return 0;
}


Обсуждение

давно
Мастер-Эксперт
325460
1469
06.10.2010, 11:11
общий
это ответ
Здравствуйте, Azarov88.
в классе реализовано Makenull уточните задание вам нужно сделать отдельные функции или дописать класс linklist // список
и что должна делать функция Retrive (p, S)
пример реализации Pop в приложении

Приложение:
///////////////////////////////////////////////////////////
void linklist::Pop ()
{
link* current;


current = first->next;
delete first;
first = current;

}
////////////////////////////////////////////////////////////
Об авторе:
to live is to die
Неизвестный
06.10.2010, 11:41
общий
это ответ
Здравствуйте, Azarov88.

Я дописал к классу две функции, третья, по заданию, там уже есть.

Код:

class linklist // список
{
private:
link* first;
public:
linklist ( ) // конструктор без параметров
{ first = NULL; } // первого элемента пока нет
void additem ( int d ); // добавление элемента
void display ( ); // показ данных
void makenull ( ); // функция делает список L пустым и возвращает позицию END(L)
int pop();
int retrive( int idx );
};


Код:

///////////////////////////////////////////////////////////
int linklist::pop ( )
{
if(first == NULL)
return -1;
int iResult = first->data;
link* top = first;
first = top->next;
delete top;
return iResult;
}

///////////////////////////////////////////////////////////
int linklist::retrive ( int idx )
{
int iCount = 0;
link* current = first;
while( current )
{
if(iCount == idx)
return current->data;
iCount++;
current = current->next;
}
return -1;
}



Код:

//...
// моя добавка:
cout << "3-rd item: " << li.retrive(2) << ", 2-nd item: " << li.retrive(1) << "\n";

cout << "popped: " << li.pop() << "\n";
cout << "left: \n";
li.display();
cout << "\n";

cout << "popped: " << li.pop() << "\n";
cout << "left: \n";
li.display();
cout << "\n";
// моя добавка/конец
//...


Я бы ещё функцию dysplay переписал, чтоб её можно было прям в cout вставлять...

Приложение:
// linklist.cpp
// список
#include <iostream>
#include <conio.h>
using namespace std;
///////////////////////////////////////////////////////////
struct link // один элемент списка
{
int data; // некоторые данные
link* next; // указатель на следующую структуру
} ;
///////////////////////////////////////////////////////////
class linklist // список
{
private:
link* first;
public:
linklist ( ) // конструктор без параметров
{ first = NULL; } // первого элемента пока нет
void additem ( int d ); // добавление элемента
void display ( ); // показ данных
void makenull ( ); // функция делает список L пустым и возвращает позицию END(L)
int pop();
int retrive( int idx );
};
///////////////////////////////////////////////////////////
void linklist::additem ( int d ) // добавление элемента
{
link* newlink = new link; // выделяем память
newlink->data = d; // запоминаем данные
newlink->next = first; // запоминаем значение first
first = newlink; // first теперь указывает на новый элемент
}
///////////////////////////////////////////////////////////
void linklist::makenull ()
{
link* current;

while(first)
{
current = first->next;
delete first;
first = current;
}
}
///////////////////////////////////////////////////////////
void linklist::display ( )
{
link* current = first; // начинаем с первого элемента
while( current ) // пока есть данные
{
cout << current->data << endl; // печатаем данные
current = current->next;
}
}

///////////////////////////////////////////////////////////
int linklist::pop ( )
{
if(first == NULL)
return -1;
int iResult = first->data;
link* top = first;
first = top->next;
delete top;
return iResult;
}

///////////////////////////////////////////////////////////
int linklist::retrive ( int idx )
{
int iCount = 0;
link* current = first;
while( current )
{
if(iCount == idx)
return current->data;
iCount++;
current = current->next;
}
return -1;
}

///////////////////////////////////////////////////////////
int main ( )
{ int el,n;
linklist li; // создаем переменную-список
cout<<"input number of element";
cin>>n;

while (n>0)
{
cout<<"input current element";
cin>>el;
li.additem ( el ); // добавляем туда несколько чисел
n--;
}
/* li.additem ( 25 ); // добавляем туда несколько чисел
li.additem ( 36 );
li.additem ( 49 );
li.additem ( 64 ); */

li.display ( ); // показываем список
getch();

cout << "3-rd item: " << li.retrive(2) << ", 2-nd item: " << li.retrive(1) << "\n";

cout << "popped: " << li.pop() << "\n";
cout << "left: \n";
li.display();
cout << "\n";

cout << "popped: " << li.pop() << "\n";
cout << "left: \n";
li.display();
cout << "\n";

li.makenull();
getch();

cout<<"Wiwod spiska \n";
li.display ( ); // показываем список
getch();
return 0;
}

Форма ответа