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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2019, 18:09   #1
Tier_Mia
Пользователь
 
Регистрация: 13.10.2019
Сообщений: 14
По умолчанию Реализация односвязный списка, поменять местами первый и последний член

Добрый день,
Помогите, пожалуйста, с реализацией односвязного списка. Мне нужно поменять местами первый и последний член ОС. Все методы, кроме change, работают. В Add я записываю в файл ОС, в Show я его считываю с файла. После этого мне нужно поменять местами последний и первый член, с этим и возникают трудности. Я много что перепробовал, но нечего не помогло. Я понял, что нужно создать временную переменную, но не знаю, как это реализовать. В коде могут присутствовать неясности, так как я пробовал экспериментировать

Код:


#include <conio.h>
#include <iostream>
#include<fstream>
using namespace std;
typedef double TE;
struct element                      //Структура с инфополями и адресным полем
	{
		TE x ;                             //Инфополе. значения из x будут передаваться в список
		element* Next;                     //Адресное поле
	};

	struct List {                        
		element* Head;                     //Указатель на последний активный элемент или просто голова списка
	public:
		List() { Head = NULL; }             //Конструктор и инициализация указателя пустым значением
		~List();                           //Прототип деструктора. Сам деструктор вынесен за класс
		void Add(TE x, int N);                   //Прототип функции добавления значений в список
		void Show(TE &x);                       //Прототип функцииотображения списка на экране	
		void check(int &count);
		void change(TE &x, TE& x1);
	};

	List::~List()                       //Деструктор вынесен за класс
	{
		while (Head != NULL)            //Пока по адресу не пусто
		{
			element* temp = Head->Next; //Временная переменная для хранения адреса следующего элемента
			delete Head;                //Освобождаем адрес обозначающий начало
			Head = temp;                //Меняем адрес на следующий
		}
	}

	void List::Add(TE x, int N )               //Функция добавления элементов в список
	{

		cout << "Write the name of your file " << endl;
		string path;
		cin >> path;
		fstream file;
		file.open(path, fstream::in | fstream::out | fstream::app);              
		List lst;                     //Переменная, тип которой список
		cout << "N = ";
		cin >> N;
		for (int i = 0; i < N; i++)
		{
		element* temp = new element;       //При каждом вызове выделяется память
		temp->x = x;                        //Записываем x в элемент структуры  element (в x структуры element)                //Указываем, что след. элемент это объект по адресу Head
		Head = temp; 
		cout << i + 1 << ". x = ";
		cin >> x;
		file << x;  
		file << " ";
		}
		file.clear();
		file.seekg(0, ios_base::beg);
	}

	
	void List::check(int &count)
	{
		cout << "Write the name of your file " << endl;
		string path;
		cin >> path;
		fstream file;
		file.open(path, fstream::in | fstream::out | fstream::app);
		file.clear();
		file.seekg(0, ios_base::beg);
		List lst;                     //Переменная, тип которой список
		element* temp = Head;
		int num;
		count = -1;
		while (!file.eof())
		{
			file >> num;
			count++;;
		}
		if (count == 0)
		{
			cout << " your linked list have no numbers " << endl;
		}
		else if (count > 0)
		{
			cout << "The amount of numbers in the linked list is " << count << endl;
		}
		
	}
	void List::Show(TE& x)                   //Функция отображения списка на экране
	{
		cout << "Write the name of your file " << endl;
		string path;
		cin >> path;
		fstream file;
		file.open(path, fstream::in | fstream::out | fstream::app);
		file.clear();
		file.seekg(0, ios_base::beg);
		List lst;                     //Переменная, тип которой список
		element* temp = Head;
		int num;
		int count = -1;
		while (!file.eof())
		{
			file >> num;
			count++;;
		}
		if (count == 0)
		{
			cout << " your linked list have no numbers " << endl;


		}
		else if (count > 0)
		{
			cout << "  yor linked list: ";
			file.clear();
			file.seekg(0, ios_base::beg);
			element* temp = new element;
			for (int i = 0; i < count; i++)
			{
				file >> x;
				temp->x = x;
				temp->Next = Head;
				cout << temp->x << " ";

			}
			file.clear();
			file.seekg(0, ios_base::beg);
			
		

		}
			}

	void List::change(TE& x, TE& x1)
	{
		element* temp = Head;
		element* first = Head;
		element* last = NULL;
		last->x = x1;
		while (temp != NULL)
		{
			temp->x = x;
			temp->Next = Head;
			cout << temp->x << " ";
		}
		temp->Next = NULL;
		temp->x = x1;
		cout << temp->x << endl;

		

	}
	void main()
	{
		TE x = 0;
		TE x1 = 0;
		int b = 0;
		cin >> b;
		int N = 0;
		List lst;
		if(b==1)
		{
			lst.Add(x, N);
		}
		else if (b == 2)
		{
			int count = -1;
			lst.check(count);
	
		}
		else if (b == 3)
		{
			lst.Show(x);
		}
		else if (b == 4)
		{
			lst.Show(x);
			lst.change(x, x1);
		}
	}
Tier_Mia вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS Word Visual Basic. Поменять местами первый и последний абзацы. Coul777exe Помощь студентам 0 30.10.2016 21:13
Как поменять местами первый и последний символ в Паскаль Flocky Паскаль, Turbo Pascal, PascalABC.NET 5 11.12.2015 16:59
Поменять местами первый и последний столбец admokep C++ Builder 4 12.01.2015 16:25
Поменять в двумерном массиве местами первый и последний столбец }|{eka Паскаль, Turbo Pascal, PascalABC.NET 6 21.06.2012 20:19
Pascal.поменять местами первый и последний символ в последнем слове Kris92 Помощь студентам 5 07.07.2010 14:00