Пусть L обозначает кольцевой двунаправленный список с заглавным звеном. Описать функцию или процедуру, которая определяет, есть ли в списке L хотя бы один элемент, который равен следующему за ним по кругу элементу. Задача № 14 "Двунаправленные списки" (см. "Сборник задач для начинающего программиста"). Алгоритм : #include <stdio.h> #include <stdlib.h> #include <conio.h> struct TNode { //объявляем структуру данных int n; TNode *next; TNode *prev; } *start , *last ; void funkt1 (int m ) { // функция построения двунапрвленного списка TNode *p; while (m!=0) { if (start==NULL) { // создаём первый элемент start= new TNode; start->n=random(10); start->next=NULL; start->prev=NULL; last=start; printf(" %d ",start->n); } else { // строим остальные элементы p= new TNode; p->n=random(10); p->next=NULL; last->next=p; p->prev=last; last=p; printf(" %d ",p->n); } m--; if (m==0) { // замыкаем первый и последний элементы last->next=start; // образуем "кольцо" start->prev=last; } } return ; } void funkt2 () { // функция проверки равенства элементов TNode *f; f=start; while (f->next!=start) { if (f->n==(f->next)->n || f->n==(f->prev)->n ) { printf(" \n\n YES"); break ; } else f=f->next; } return ; } int main() { int k; randomize (); clrscr (); printf ("vvedute kol-vo elementov : "); scanf ("%d",&k); funkt1 (k); funkt2(); getch(); return 0 ; }
Ключевые слова:
исправлено (разделил на 2 функции)
|
|||||||