Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <locale>
- using namespace std;
- //Очередь. Тип поля - int . Удалить из списка первый элемент с четным информационным полем.
- struct point{
- int data;
- point* next;
- };
- void print_list(point* beg)
- //печать списка
- {
- point* p = beg;//начало списка
- while (p != 0)
- {
- cout << p->data << "\t";
- p = p->next;//переход к следующему элементу
- }
- }
- point* make_list(int n)
- {
- point*beg;//указатель на первый элемент
- point*p, *r;//вспомогательные указатели
- beg = new(point);//выделяем память под первый элемент
- cout << "Введите значение 1 эл-та :" << endl;
- cin >> beg->data;//вводим значение информационного поля
- beg->next = 0;//обнуляем адресное поле
- //ставим на этот элемент указатель p (последний элемент)
- p = beg;
- for (int i = 0; i<n - 1; i++)
- {
- r = new(point);//создаем новый элемент
- cout << "Введите значение " << i+2 <<" эл-та :" << endl;
- cin >> r->data;
- r->next = 0;
- p->next = r;//связываем p и r
- //ставим на r указатель p (последний элемент)
- p = r;
- }
- return beg;//возвращаем beg как результат функции
- }
- point* del_point(point*beg)
- //удаление первого эл-та с чётным значением, 0 не считается чётным
- {
- point*p = beg;
- bool flag = true;
- while (p != NULL && flag){ //Проверяем, есть ли необходимый эл-т
- if (p->data % 2 == 0 && p->data != 0){
- flag = false; //Если эл-т существует останавливем цикл
- }
- p = p->next;
- }
- p = beg;
- if (flag == true) cout << "НЕТ ЭЛ-ТА С ЧЁТНЫМ ЗНАЧЕНИЕМ" << endl << endl;
- else{
- if (p->data % 2 == 0 && p->data != 0){ //Проверяем голову на чётность
- beg = p->next;
- delete p;
- }
- else{ // Если голова нечётная, продолжаем поиск в списке
- while (p->next->data % 2 != 0 && p->next != NULL || p->next->data == 0){ //Идём по списку до первого чётного или конца, пропуская 0
- p = p->next;
- }
- if (p->next != NULL && p->next->next != NULL){ //Если находим эл-т в середине списка
- point* r = p->next; //Запоминаем нужный эл-т
- p->next = r->next; //Изменяем указатель через эл-т
- delete r; //Удаляем необходимый эл-т
- }
- else{ //Если найденый эл-т последний
- point* r = p->next;
- p->next = NULL;
- delete r;
- }
- }
- }
- return beg;
- }
- point* del(point*beg)
- //удаление списка из памяти
- {
- point*p = beg;
- while (p != NULL){
- point* r = p;
- p = p->next;
- delete r;
- }
- return beg;
- }
- void main(){
- setlocale(LC_ALL, "rus");
- int n;
- cout << "Введите кол-во элементов" << endl;
- cin >> n;
- point* beg = make_list(n);
- cout << "Исходный список : " << endl;
- print_list(beg);
- cout << endl;
- cout << "Список после обработки : " << endl << endl;
- beg = del_point(beg);
- print_list(beg);
- cout << endl;
- beg = del(beg);
- cout << "Список удалён из памяти" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment