Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |