Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Программа, которая создает закольцованный список и затем последовательно удаляет из списка каждый m-й элемент до тех пор, пока не будут удалены все.





#include<iostream>

#include<iomanip>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

using namespace std;

 

// структура, которая описывает один узел:

struct Node

{

int num;

Node* ptr;

};

 

// функция, которая добавляет 1 элемент в список:

void Add(Node*& pLast, int i)

/* первый параметр – ссылка на указатель, который будет хранить адрес последнего добавленного элемента, второй параметр – значение элемента данных, которое будет записано в этот узел */

{

Node* pNext = new Node; // выделяем место под новый узел

if (pLast) pLast -> ptr = pNext;

// если предыдущий узел существует, подсоединяем новый узел к предыдущему

pNext -> num = i; // записываем элемент данных

pNext -> ptr = NULL;

// указатель, записанный в последнем узле пока никуда не указывает

pLast = pNext; // новый узел становится последним

}

// -----------------------------------------------------------

// функция, которая удаляет узел с номером m:

int Del(Node*& pToken, int m)

// первый параметр – адрес текущего узла

{

int n; // элемент данных из удаляемого узла

if (pToken->ptr!= pToken) // если узел - не единственный

{

// Отсчет:

for (int i = 1; i < m; i++)

pToken = pToken->ptr; // переходим к следующему узлу

//Адрес удаляемого элемента:

Node* tmp = pToken->ptr;

n = tmp->num; // запоминаем значение элемента данных

pToken->ptr = tmp->ptr;

// запоминаем в узле перед удаляемым адрес узла, который расположен за удаляемым

delete tmp; // удаляем узел

}

else // если узел – единственный, просто удаляем его

{

n = pToken -> num;

delete pToken;

pToken = NULL;

}

return n;

}

//------------------------------------------------------------

 

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

do

{

int n, m;

do

{

cout << "Задайте начальное количество элементов >=1 --> ";

cin >> n;

} while (n < 1);

do

{

cout << "Задайте номер удаляемого элемента от 1 до "<< n << " --> ";

cin >> m;

} while (m < 1 || m > n);

// Указатели на начало и конец списка:

Node *pBegin = NULL, pLast = NULL;

//Формирование списка:

for (int i = 1; i <= n; i++)

{

Add(pLast, i);

if (i == 1) pBegin = pLast;

}

// Закольцуем список:

pLast->ptr = pBegin;

 

//Занимаем начальную позицию:

Node* pToken = pLast;

// Удаление:

do

{

cout<<"" << Del(pToken, m) << ' ';

} while (pToken);

cout << endl;

cout << "\nНажмите любую клавишу\n";

} while (_getch()!=27);

return 0;

}







Date: 2016-08-30; view: 297; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.01 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию