Задача создать очередь с вложением поэлементно удаляемыми элементами из стека. Реализация через указатели.
Я создал файл данных с помощью ofstream. Теперь мне надо используя эти данные сначала создать стек, удалить элемент, создать очередь используя элементы из стека, удалить элемент, создпть список и бинарное дерево
В общем это вся моя курсовая
Код программы приведен ниже:
Код:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include <stack>
#include <list>
#include <queue>
#include <numeric>
#include <windows.h>
#include <conio.h>
using namespace std;
int k = 3;//заданное значение
int variant = 4;//четвертый вариант
//-------------------------
struct Node
{
int d;
Node *p;
Node *left;
Node *right;
Node *next;
Node *prev;
};
//-------------------------
Node * first (int d);
void push(Node **top, int d);//функция помещения в стек, очередь
int pop (Node **top);//выборка из стека, очереди
void add(Node **pend, int d[]);
Node * find(Node * const pbeg, int i);
bool remove (Node **pbeg, Node **pend, int key);
int del (Node **pbeg);
Node *search_insert(Node *root, int d);
Node *insert(Node *const pbeg, Node **pend, int key, int d);
void print_tree(Node *root, int l);
void show(const char *str, const list<int> &L)
{
cout<<str<<":"<<endl;
for (list<int>::const_iterator i = L.begin(); i !=L.end(); ++i)
cout<<*i<<" "<<endl;
}
//---------------------------------------
int file()
{
//создание файла и занесение задания
ofstream output_file("d:\\FILENAME.TXT");
output_file << "45 7 89 75 44 5 51 57 94" << endl;
//ПРОВЕРКА ОШИБОК ПРИ ВЫПОЛНЕНИИ ФАЙЛОВЫХ ОПЕРАЦИЙ
if (output_file.fail())
{
cerr << "Ошибка открытия FILENAME.TXT!" << endl;
exit(1);
}
//используя STL создаю стек
ifstream in ("d:\\FILENAME.TXT");
stack <int, vector<int> >s;
int x;
while (in >>x, !in.eof()) s.push(x);
while (!s.empty())
{
x = s.top();
cout<<x<<" ";
s.pop();
}
}
//Создание стека
class Stack
{
public:
void stac1()
{
//В общем здесь помогите как-нибудь с функцией вставки, чтобы элементы добавлялись из файла
Node *top = first (45);//начальный элемент
push (&top, 7);
push (&top, 89);
push (&top, 75);
push (&top, 44);
push (&top, 5);
push (&top, 51);
push (&top, 57);
push (&top, 94);
while (top)
cout<<pop(&top)<<' ';
}
//начальное формирование стека
Node *first(int d)
{
Node *pv = new Node;
pv -> d = d;
pv -> p = 0;
return pv;
}
//занесение в стек
void push(Node **top, int d)
{
Node *pv = new Node;
pv -> d = d;
pv -> p = *top;
*top = pv;
}
//выборка из стека
int pop(Node **top)
{
int temp = (*top) -> d;
Node *pv = *top;
*top = (*top) -> p;
delete pv;
return temp;
}
};//окончание Стека1
//--------------------------------------
class Ochered
{
public:
void ocher()
{
//Создание очереди
//Сюда надо вставить полученное выражение из стека
Node *pbeg = first (45);//начальный элемент
Node *pend = pbeg;//очередь заканчиваетя едва начавшись
add (&pend, 75);
add (&pend, 89);
add (&pend, 75);
add (&pend, 44);
add (&pend, 5);
add (&pend, 51);
add (&pend, 57);
add (&pend, 94);
//добавление элемента в очередь, равного варианту курсового задания
add (&pend, variant);
while (pbeg)
cout<<del(&pbeg)<<' ';//количество
}
//начальное формирование очереди
Node *first(int d)
{
Node *pv = new Node;
pv -> d = d;
pv -> p = 0;
return pv;
}
//занесение в стек
void add(Node **pend, int d)
{
Node *pv = new Node;
pv -> d = d;
pv ->p = 0;
(*pend) ->p = pv;
*pend = pv;
}
//выборка
int del(Node **pbeg)
{
int temp = (*pbeg) -> d;
Node *pv = *pbeg;
*pbeg = (*pbeg) -> p;
delete pv;
return temp;
}
};
void main(void)
{
setlocale(LC_ALL,"Russian");//подключение русских символов
cout<<"\Курсовая работа"<<endl;
char c;
do
{
cin >> c;
switch (c)
{
case '0':cout<<"\nЗагрузка задания:"<<endl;
file(); cout<<"\aНажмите любую клавишу"<<endl;
getch(); break;
case '1':cout<<"\nВывод в виде стека:"<<endl;
Stack().stac1();
cout<<"\a\nНажмите любую клавишу"<<endl;
getch(); break;
case '2':cout<<"\nВывод в виде очереди:"<<endl;
Ochered().ocher();cout<<"\a\nНажмите любую клавишу"<<endl;
getch(); break;
case '9': exit(1);
}
}
while (c!=9);
}