Построить список натуральных чисел длиной N. Сжать полученный список, убрав все четные числа. Задача №2 из раздела "Простые списки". (см. "Сборник задач для начинающего программиста") Алгоритм: #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> struct tList { //Объявляем структуру int a; tList *next; } *first, *last, *l; //экземпляры труктуры данных /*функция заполнения списка*/ void Fill_List (int size) { int i, stime; long ltime; /* Получение текущего времени для генератора случайных чисел */ ltime = time(NULL); stime = (unsigned) ltime/2; srand(stime); if (first == NULL) { //Первый элемент first = new tList; first -> a = rand() % 100; last = first; printf ("%d ", first -> a); } for (i=1; i<size; i++) { //Последующие элементы l = new tList; l -> a = rand() % 100; l -> next = NULL; last -> next = l; last = l; printf ("%d ", l -> a); } } /*Функция, определяющая элемент в списке, идущий ПЕРЕД текущим в вызывающей функции*/ tList *prev_search (tList *X, tList *first, tList *last) { tList *t; t = first; while (t) { //...используя метод перебора с начала списка if (t -> next == X) return t; t = t -> next; } return t; } /*функция удаления элемента из списка (первый элемент не обрабатывается)*/ void Remove (tList *x, tList *first, tList *last) { tList *prev; prev = prev_search(x, first, last); if (x == last) { last = prev; last -> next = NULL; } else prev -> next = x -> next; } void Search_Even(tList *x, tList *last) { //Функция поиска четных чисел в списке. while (x) { if (x -> a % 2 == 0) { if (x == first) //Самостоятельная обработка первого элемента списка //без использования функции Remove. first = x -> next; else //Все последующие элементы обрабатывает функция Remove. Remove(x, first, last); if (x -> a > 9) //Следующая связка операторов if/else printf ("X "); //используется исключительно в эстетических целях. else printf ("X "); } else printf ("%d ", x -> a); x = x -> next; } } /*Функция, вывода уже обработанного списка на экран*/ void Display (tList *x) { while (x) { printf ("%d ", x -> a); x = x -> next; } if (first == NULL) printf ("List is empty :("); } /*Все объявили, запускаем программу*/ int main(void) { int N; printf ("Enter list size...\n"); scanf ("%d", &N); //Задаем размер списка printf ("\n\nInitial list:\n"); Fill_List(N); //Вызываем функцию заполнения списка размера N и вывода его на экран printf ("\n\nDeleting even numbers in list:\n"); Search_Even(first, last); //Вызываем функцию поиска и удаления четных чисел в списке //которая также выводит результаты своей работы printf ("\n\nResulting list:\n"); Display (first); //Выводим итоговый список, уже очищенный if (first == NULL) printf ("List is empty :-("); getch(); //Ожидание реакции пользователя return 0; }
Ключевые слова:
список, определение четности, удаление элемента из списка
|
|||||||