Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 10:35   #1
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
Восклицание Создание очереди с использованием элементов стека

Задача создать очередь с вложением поэлементно удаляемыми элементами из стека. Реализация через указатели.

Я создал файл данных с помощью 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);
}
Авторитет вне форума Ответить с цитированием
Старый 11.04.2010, 19:33   #2
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

Шилдт Г. Самоучитель C++ с.319
Дырдин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7, создание функционального калькулятора с использованием класса ulala Помощь студентам 16 27.03.2013 23:00
Cравнение элементов очереди. STL. Lazio Помощь студентам 0 11.11.2009 00:16
Исправить нерабочую программу с использованием СТЕКА, С++ Vikylik Помощь студентам 2 22.04.2009 13:00