Инструменты пользователя

Инструменты сайта


разное:testlist

TestList

Скачать программу testlist.exe

// TestList.cpp : 
//
 
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
 
struct Node       //Структура являющаяся звеном списка
{
	int x;     //Значение x будет передаваться в список
	Node *Next, *Prev; //Указатели на адреса следующего и предыдущего элементов списка
};
 
class List   //Создаем тип данных Список
{
	Node *Head, *Tail; //Указатели на адреса начала списка и его конца
public:
	List() :Head(NULL), Tail(NULL){}; //Инициализируем адреса как пустые
	~List(); //Деструктор
	void Show(); //Функция отображения списка на экране
	void Add(int x); //Функция добавления элементов в список
	void AddToHead(int x);
};
 
List::~List() //Деструктор
{
	while (Head) //Пока по адресу на начало списка что-то есть
	{
		Tail = Head->Next; //Резервная копия адреса следующего звена списка
		delete Head; //Очистка памяти от первого звена
		Head = Tail; //Смена адреса начала на адрес следующего элемента
	}
}
 
void List::Add(int x)
{
	Node *temp = new Node; //Выделение памяти под новый элемент структуры
	temp->Next = NULL;  //Указываем, что изначально по следующему адресу пусто
	temp->x = x;//Записываем значение в структуру
 
	if (Head != NULL) //Если список не пуст
	{
		temp->Prev = Tail; //Указываем адрес на предыдущий элемент в соотв. поле
		Tail->Next = temp; //Указываем адрес следующего за хвостом элемента
		Tail = temp; //Меняем адрес хвоста
	}
	else //Если список пустой
	{
		temp->Prev = NULL; //Предыдущий элемент указывает в пустоту
		Head = Tail = temp; //Голова=Хвост=тот элемент, что сейчас добавили
	}
}
void List::AddToHead(int x)
{
	Node *temp = new Node; //Выделение памяти под новый элемент структуры
	temp->Prev = NULL;  //Указываем, что изначально по предыдущему адресу пусто
	temp->x = x;//Записываем значение в структуру
 
	if (Head != NULL) //Если список не пуст
	{
		temp->Next = Head; //Указываем адрес на предыдущий элемент в соотв. поле
		Head->Prev = temp; //Указываем адрес следующего за хвостом элемента
		Head = temp; //Меняем адрес головы
	}
	else //Если список пустой
	{
		temp->Next = NULL; //Предыдущий элемент указывает в пустоту
		Head = Tail = temp; //Голова=Хвост=тот элемент, что сейчас добавили
	}
}
 
void List::Show()
{
	//ВЫВОДИМ СПИСОК С НАЧАЛА
	Node *temp = Tail;
	temp = Head; //Временно указываем на адрес первого элемента
	cout << "\nList\n";
	while (temp != NULL) //Пока не встретим пустое значение
	{
		cout << temp->x << "->"; //Выводим каждое считанное значение на экран
		temp = temp->Next; //Смена адреса на адрес следующего элемента
	}
	cout << "NULL";
	cout << "\n\nInput element by insert to begin of list (0 - to exit) :";
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
	system("CLS");
	List lst; //Объявляем переменную, тип которой есть список
	lst.Add(10); //Добавляем в список элементы
	lst.Add(20);
	lst.Add(30);
	lst.Add(40);
	int a=1;
	while (a!=0) {
		lst.Show();
		cin >> a;
		lst.AddToHead(a);
	}
 
	return 0;
}
разное/testlist.txt · Последнее изменение: 2018.02.27 12:40 — feser