Описать процедуру, которая переносит в конец непустого списка L его первый элемент. (простые списки задача №18)(см. "Сборник задач для начинающего программиста") Алгоритм: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <conio.h> // Описываем структуру данных - элемент списка struct L { int value; L* nextItem; }; // Функция печатает список void printList(L* List) { L *currentItem=List; while(currentItem) { printf("%d\n", currentItem->value); currentItem=currentItem->nextItem; }; } // Функция создает список из заданного количества элементов L* createList(int size) { L* List=new L; L* currentItem=List; currentItem->value=rand(); for(int num=2;num<=size;num++) { // Создаем новый элемент списка currentItem->nextItem=new L; currentItem->nextItem->value=rand(); // Перемещаем указатель текущего элемента на только что созданный элемент списка currentItem=currentItem->nextItem; // Если это последний элемент списка,устанавливаем указатель на следующий элемент в ноль if(num==size) { currentItem->nextItem=NULL; }; }; return List; } // Функция переносит в конец списка его первый елемент L* changeList(L *List) { L *firstElement,*currentItem,*lastItem; // Запоминаем старый первый элемент списка firstElement=List; // Обновляем первый элемент списка List=List->nextItem; // Перебираем список до конца currentItem=List; while(currentItem->nextItem) { currentItem=currentItem->nextItem; }; lastItem=currentItem; // Добавляем в конец списка элемент firstElement->nextItem=NULL; lastItem->nextItem=firstElement; return List; } int main() { L* testList; int testListSize=0; std::cout<<"Vvedite razmer spiska:\t"; // Получаем размер списка std::cin>>testListSize; // Проверяем корректность значения if(testListSize==0) { std::cout<<"Razmer ne vernyi!\n"; getch(); exit(0); } // Создаем список testList=createList(testListSize); // Печатаем созданный список std::cout<<"\n\n\nSpisok:\n\n"; printList(testList); // Производим оперцию над списком testList=changeList(testList); // Печатаем созданный список std::cout<<"\n\n\nNovyi Spisok:\n\n"; printList(testList); // Удаляем список и освобождаем память L* currentItem=testList; while(testList->nextItem) { currentItem=testList->nextItem; delete testList; testList=currentItem; }; // Ожидаем от пользователя нажатия любой клавиши для выхода из программы getch(); }
Ключевые слова:
список, перенос элемента
|
|||||||