Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

шпоры / прогр

.doc
Скачиваний:
4
Добавлен:
25.05.2014
Размер:
95.23 Кб
Скачать
  1. Любую сложную задачу можно решить, разбив ее на несколько частей. При решении задач на С++, разделение на более простые подзаадчи и функции. Разделение на ф. позволяет: 1) избежать избыточность кода (т.к. ф. записывается только раз, а вызвать можно ее многократно); 2) упростить структуру программы; 3) упростить процесс отладки и сопровождения прогр., поместив часто используемые ф. в библиотеки (функции ввода/вывода, обработки строк, преобразовании данных и т.д.) В программе ф. можно располагать в любой последовательности. Одна ф. не может быть включена в другую ф.

Функция – это самостоятельная часть программы, которая реализует конкретные задания или ее часть. Она должна обязательно быть объявлена, определена и вызвана. Оператор return завершает процесс работы ф. и передает управление в вызывающую программу, в точку вызова. Return в теле ф. может быть записан несколько раз. Ф. может возвращать результат, а может и не возвращать. В последнем случае типом ф. является void («пустой»). Ф. не может возвращать в виде ответа массив любого типа, но может передать указатель на массив такого типа.

2. Функция должна обязательно быть объявлена, определена и вызвана. Прототип ф. - это ее имя с указанием типов поступающих параметров. Прототип завершается точкой с запятой. Пр. яв-ся предварительным объявлением данных ф. Пр. необходим компилятору, чтобы проконтролировать корректность вызова ф. и в необходимых случаях выводить ошибку. .имена параметров можно опустить, но рекомендуется их указывать. Компилятор будет использовать имена параметров ф. при выводе диагностических сообщений о несоответствии типов аргументов и параметров. Обычно прототип ф. помещают в начало программы, а само тело ф. – после ф. main. Определение ф. – это ее полная реализация. Определение ф. имеет формат: тип имя_ф (список формальных параметров). Определение ф. содержит кроме заголовка и тело ф.: { }. Тело ф. – это составной оператор, либо блок с описанием переменных, массивов и т.д. Тело ф. не может содержать в себе другие функции. Допустимо обращение к др. ф-м. Определение может находиться в любом месте программы. Функция активизируется (вызывается), если в тексте программы встречается имя ф. с последующими круглыми скобками, в которых записаны выражения, разделенные зпт, они яв-ся аргументами, передаваемыми в ф.

3. Ф. могут обмениваться информацией тремя способами: 1) с помощью глобальных переменных; 2) передавая копии данных; 3) передавая адреса, где записаны значения аргументов. При реализации первого способа, глобальные переменные задаются вне ф. Локальные переменные (об-ся внутри ф.), имеющих такое же наименование, блокируют и делают невозможным использование одноименных глобальных переменных. Это приводит к трудноуловимым ошибкам. Поэтому не рекомендуется использовать первый способ. Рекомендуется использовать 2-й или 3-й способ. Или даже их комбинацию. Механизм передачи значения некоторого аргумента заключается в след-м: *в случае, если аргумент – имя некой переменной или яв-ся выражением, то осущ-ся копирование значения аргумента в стек на место соответствующего параметра, это второй способ. * если в качестве параметра используется адрес передаваемого аргумента, то в стек помещается адрес, по которому записано значение этого аргумента – это 3-й способ. Рекурсивные ф. – ф., которая может вызвать саму себя. Простая р.ф. – если ф. в теле содержит вызов самой себя. Косвенная р.ф. – если ф. вызывает др. ф., а та в свою очередь вызывает 1-ю. при работе с рекурсивными ф. прога сохраняет в стеке значения всех локальных переменных, ф. и ее аргументов с тем, чтобы в дальнейшем по возвращению из рекурсивного вызова восстановить их сохраненные значения. Ф. main может быть рекурсивной в Turbo C, т.е. расширение должно быть «.с», а не «.срр»

4. Монитор ПК может работать в двух режимах: текстовых и графических. Наименьшая единица измерения это пиксель. На яз программирования C++ существует библиотека для работы с графикой: <graphics.h>. Она содержит огромное количество стандартных функций. Например, ф. для управл. цветом, создание изображения различной формы, для вывода текстовых сообщений. Настройка этих функций осущ-ся путем подключения граф-го драйвера, который находится в отдельных файлах с расширением BGI. Графические функции используют понятия указателя текущей позиции (это аналог курсора, только невидимый). Данный ук-ль идентифицирует выбранный пиксель и хар-ся парой целых чисел (гор и верт координация) Инициализация граф режима осущ-ся ф-й initgraph(). Параметры данной ф.: &gd – граф драйвер; &gm – граф режим (initgraph(&gd,&gm, путь_к_файлу_с_BGI)). При работе с ошибками используется ф. graphresult(), которая возвращает код завершения последней используемой гр-й функции. В случае успеха возвращения ноль: grok=0; иначе: grNoInitGraph=1 (графика не инициализирована). Виды ошибок: grNoLoadMenu=5 – нехватка памяти для драйвера; grFontNoFound=8 – файл не найден. Установка цвета регулируется ф. setbcolor(цвет), текущее значение рисующего цвета – getcolor(), работа с текстами ведется в ф. settlinestyle(шрифт,напр,разм). Для установки стиля закраски используется ф. setfillstyle(тип_закраски, цвет). За работу с окнами и координатами отвечают след ф.: 1) очистка экрана – cleardevice(); 2) очиста гр.окна – clearviewport().

5. Допустимые значения для параметров шрифта след: 0~defaut_font (станд); 2 – small_font (уменьш, нах в библ. LITT.CHR); 3 – sans_serif_font (пр. нах. в библ. SANS.CHR); 4 – gothic_font (готич-GOTH.CHR). Допустимые знач для направления: 0-horiz dir; 1-vert dir. Значения для толщины: 1-norm_width (линия толщиной 1 пиксель); 2-second_width (линия толщ 2 пикселя) и т.д. Допустимые значения типа закраски: 0-empy_fill-штриховка цветом фона; 1-solid_fill – сплошная заливка ук-м цветом; 10-widedot_fill – заполнение редкорасполож точками; 4-slash_fill – штриховка утолщенными линиями.

6. Каждая переменная на С++ принадлежит какому-л. классу памяти. КП переменной определяет время существования и область видимости, связанные с понятиями блока программы (сколько времени и где существует). Блоком программы называют часть проги заключенную в фигурные скобки, то есть тело программы. Различают 4 типа класса памяти: auto, register, extern и static. Большинство принадлежит первому классу. Она принята по умолчанию для всех переменных. Автоматическая переменная всегда локальна, но не наоборот. Память для нее выделяется при входе и освобождается при выходе из блока, где она объявлена. Доступ из внешнего блока невозможен. То есть, автоматические переменные образуются при входе и исчезают при выходе из блока, они не сохраняют свои значения. Регистровая переменная – это автоматическая переменная. Ключевое слово register лишь указывает компилятору, что такую переменную рекомендуется разместить вне оперативной памяти, а в одном из регистров, если это возможно, что приводит к уменьшению работы программы. Внешняя переменная (extern) имеет область существования от точки ее объявления и до конца файла, где она объявлена. Если внутри блока определена автоматическая переменная с таким же именем, то внутри этого блока внешняя переменная не действует. Статическая переменная в противоположности автоматической переменно й сущ-т все время, пока работает прога и позволяет сохранять значения после выхода из ф. и использовать его при след входе в др блок. По умолчанию статическими переменными яв-ся все глобальные переменные.

7. Указатель-особый вид переменной, которая хранит адрес элемента памяти, где может быть записано значение другой переменной. Определение У: type *name; где type – тип данных У; * -звездочка, определяющая тип «указатель»; name –имя переменной. Поскольку У служит ссылкой на некую обл памяти, ему может быть присвоена только адрес некоторой переменной, а не само ее значение. Знач У перед его использованием об-но должно быть инициализирвано (т.е. присвоено нач значение). Сущ. несколько способов иниц-й У: 1) присваиваем У адреса сущ-го объекта (int a=5, int*pti=&a)/ Указателям можно присваивать значение адресов объекта только того типа, с которым они описаны. 2) присваивание пустого значения. Для реализации этой операции необходима библиотека <stdio.h>. ptr=NULL. Это означает, что отсутствует конкретный адрес ссылки. 3) Выделение участка динамическ. памяти и присваивания ее адресу Ук-ля. Сущ-т 2 операции: 1)для выделения. исп операция new (int*n=new int); 2) для высвобождения дин-й памяти – delete.

8. Операция доступа по указателю *Е, где Е- переменная типа «указатель», - операция разадресации. Результат – содержимое ячейки памяти, на которую указывает Е. Операция присваивания для указателей аналогична соответствующей операции для других типов данных. Необходимо применять операцию приведения типа, если используются ук-ли на разные типы данных. Операция увеличения (уменьшения) ук.: Е-i, E+i; где i – значение целочисленного типа. Операции сложного присваивания: Е+=i аналогично выр-ю E=E+i; Операции декремента (инкремента): Е++, Е--, ++Е, --Е. Выполнение данных операции аналогично соответствующим операциям над целочисленными типами, т.е. ук будет смещаться на один элемент. Операция индексирования Е[i], эта операция полностью аналогична выражению *(E+i), т.е. из памяти извлекается и используется в выражении значение i-того эл-та массива, адрес которого присвоен указателю Е.

9. В Си при обработке элементов массива удобно использовать указатель на этот массив. Любой доступ к элементу массива, осуществляемый операцией индексирования, может быть выполнен и при помощи указателя. Декларация int m[10]. Массив из 10 элементов. a[i] – отсылает нас к i-тому эл-ту. одновременно с выделением памяти для 10 эл-в типа int определяется значение указателя m. Значение ук m равно адресу эл-та m[0]. Значение m изменить нельзя, т.к. она константа, но его можно присвоить другому указателю и изменять уже его значение. Следует отметить, что выражение m[i] можно записать виде *(m+i), т.к. компилятор в Си преобразует все индексные выражения в адресные. Затем целая величина i преобразуется к адресному представителю путем умножения ее на размер типа, адресуемого указателем, и складывается со значением указателя m, что дает адрес, относящийся к i-той позиции в массиве. С др. стороны, если mn –указатель, то в выражениях его можно использовать с индексом mn[i]. Но между именем массива и указателем есть огромная разница. Указатель-это переменная, поэтому можно записать выражение: int m[5], *mn=m; mn++; А имя массива – это указатель-константа. В случае с функциями, если в качестве передаваемого аргумента используется массив, то в ф передается только указатель на массив, т.е. адрес первого элемента. При вызове ф. в списке аргумента записывается имя массива. Имя массива без индекса яв-ся адресом элемента с нулевым индексом. Три варианта описания массива:1)Параметр ф может быть объявлен как массив соответствующего типа с указанием его размера. 2)Массив в качестве параметра в ф может быть объявлен без указания его размера. 3) Объявление параметра-массива указателем на соответствующий тип данных.

10. В Си принято след разделение памяти (см.рис) Для глобальных переменных отводится фиксированное место в памяти на все время работы программы. Локальные переменные хранятся только в стеке. Между ними нах-ся обл свободной памяти для динамического распределения. Наиболее важными операциями для динам распред памяти яв-ся операции: 1) new~delete; 2) new[]~delete[]; new- выделение пам, delete – высвобождение пам. Для размещения динамических массивов использ 2-ю операцию, которая вызывается след образом: new_тип элемента []. Преимуществом дин массивов состоит в том, что размерность может быть переменной, то есть объем памяти, выделяемой под массив, определяется на этапе вып программы.

11. Яз программирования Си поддерживают определяемые пользователем структурированный тип данных. Он яв-ся собранием одного или более объектов , которые собраны для удобства работы под одним именем. Стр облегчают написание и понимание программ. Определение стр состоит из двух компонентов: 1) объявление шаблона структуры (задание нов типа данных, определенного пользователем); 2) определение переменных типа объявленного шаблона. Общий синтаксис объявления шаблона: struct имя_шаблона { тип1 имя_переменной1; тип2 имя_переменной2; }; Имена шаблонов должны быть уникальными в пределах их области определения, для того, чтобы компилятор мог различать шаблоны. Имена элементов внутри структуры должны быть тоже уникальными. Задание только шаблона не означает резервирование памяти компилятором. Шаблон представляет информацию компилятору о заданных данных для резервирования памяти в оперативке и организации доступа к ней при работе с этой структурой. При определении структур можно инициализировать их поля. Эта инициализация подобна иниц массивов и носит такой же хар-р: имя_шаблона имя_переменной_структуры={значение1, значение2,….}. Правила: 1)присваиваемые значения должны совпадать по типу с соответствующими полями. 2) можно присваивать значения меньшее, чем кол-во полей, остальным компилятор присвоит нули. 3) список инициализации последовательно присваивает значения полям структуры, вложенных структур и массивов.

12. Структуры могут быть созданы, редактированы, отсортированы по какому-л. полю, могут быть добавлены/удалены новые/старые данные, можно сделать поиск по одному или двум признакам.

13. Допускается использование массивов структур. Например, сведения о 100 студентах могут храниться в массиве, описанным след образом: student stud[100]; Тогда сведения об отдельных студентах будут обозначаться, например, так: stud[1].fam, stud[5].kurs и т.п. Если нужно взять первую букву 25-го студента, то следует писать: stud[25].fam[0]. Объединение-это еще один структурированный тип данных. О похоже на структуру и в своем описании отличается от него тем, что вместо ключевого слова struct используется union: union имя_типа {определение_элементов}. О отличается от стр способом организации во внутренней памяти. Все элементы в памяти начинаются с одного байта. О обычно являются частью структуры. Т.к. оно предполагает хранение одного значения из некоторого множества типов данных, то одним из элементов стр должна быть переменная, определяющая тип значения, находящегося в текущий момент в объединении. Набор типов значений, которые могут храниться в данном О, ассоциируется с ним в процессе объявления.

14. Поток-это байтовая последовательность, передаваемая в процессе ввода-вывода. Поток должен быть связан с каким-л. внешним устройством или файлом на диске. Существуют стандартные потоки и потоки, объявленные в программе. Последнее обычно связывают с файлами на диске, создаваемым программистом. Стандартные потоки назначаются и открываются системой автоматически. С началом работы любой программы открываются 5 стандартных потоков, из которых основными яв-ся след: stdin – поток станд-го ввода; stdout- поток станд вывода; stderr – вывод сообщений об ошибках. Кроме этого, открывается поток для стандартной печати и дополнительной поток для последовательного порта. По виду устройства потоки, кроме стандартных, делятся на файловые (для работы с файлами на внешних носителях) и строковые потоки (для работы с массивами). Для поддержки потоков библ Си содержит иерархию классов, построенную на основе класса ios.

15. Стандартные потоки назначаются и открываются системой автоматически. С началом работы любой программы открываются 5 стандартных потоков, из которых основными яв-ся след: stdin – поток станд-го ввода; stdout- поток станд вывода; stderr – вывод сообщений об ошибках. Прямыми потоками кл ios яв-ся кл istream (кл входных потоков) и ostream (кл выходных потоков). Потомками этих классов яв-ся класс iostream (двунаправленный поток). Объект cout принадлежит классу ofstream и представляет собой поток вывода связанный с дисплеем, операция «поместить в поток» означ , что знач переменной д/но быть выведено из памяти на дисплей. Объект cin принадлежит классу ifstream и я в-ся потоком ввода, связанной с клавой. Операция «взятие из потока» означает, что знач переменной д/но быть введено с клавиатуры в память.

16. При обработке файлов в С++ используются кл потоков: 1) кл ifstream – это кл входных файловых потоков, выполняет операцию ввода с файла. 2) кл ofstream – это класс выходных файловых потоков. 3) кл fstream –кл двунаправленных ф-х потоков. По способу доступа файлы можно разделить на: 1) текстовые (чтение происходит с начала). 2) бинарные (чтение происходит с указанного места). прототипы функции для каждого из классов: 1) void ifstream::open(char* Имя_файла, openmode режим= ios::in|ios::out); 2) void ofstream::open(char* Имя_файла, openmode режим= ios::out|ios::runc); имя_файла-это им файла, в которое может входить спецификатор пути. Значение «режим» задает режим открытия файла. Режимы открытия файла: ios::app – это откр файла в режиме добавления в конец файла. ios::ate – это режим поиска конца файла при его открытии. ios::in – открытие файла для ввода. ios::out – открытие ф. для вывода (запись информации в файл). ios::b.nary – открытие ф. в двоичном режиме. ios::nocreate – открытие ф терпит неудачу. ios::noreplace – не открывает сущ-щий ф. ios::trunс – удаление содержимого ранее сущ-го файла.

17. Функции для работы с текстовыми файлами удобно использовать при создании текстовых файлов, ведении фалов-протоколов и т.п. Но при создании баз данных целесообразно использовать функции для работы с бинарными файлами: fwrite() и fread(). Эти функции без каких-л. изменений уопируют блок данных из оперативной памяти в файл и, соответственно, из файла – в память. Такой способ требует меньше времени: unsigned fread (void *ptr, unsigned size, unsigned n, FILE *stream); unsigned fwrite (void *ptr, unsigned size, unsigned n, FILE *stream); где *ptr-указатель на буфер; size – размер блока; n – кол-во блоков; *stream – указатель на структуру FILE открытого файла. Первым параметром передается указатель на буфер, в который будут помещены данные из файла функцией fread() или из которого данные будут прочитаны функцией fwrite() Следующие два параметра задают размер блока и, соответственно, кол-во читаемых/записываемых блоков. Последний параметр- указатель на структуру FILE.

18. Управление флагами форматирования. Флаги форматирования – двоичные коды, управляющие форматом выводимых значений. В заголовочном файле iosream.h определено следующее перечисление, задающее флаги форматирования: enum { skipws =0x0001 //отбрасывание пробелов//; left = 0x0002 //выравнивание по левому краю//; right =0x0004 //вырав по правому полю//; internal =0x0008 //заполнение пустых позиций//; dec = 0x0010 //выдача в десятичном виде//; oct = 0x0020 //выдача в восьмеричном виде//; hex =0x0040 //выдача в 16-деричном виде//; showbase = 0x0080//выдача основания сист счисления//; showpoint =0x0100 //выдача позиции точки//; uppercase =0x0200 //выдача в формате xx.xxxx Exx//; showpos =0x0400 //выдача знака у положительного числа//; scientific =0x0800 //выдача в форме с плав. точкой//; fixed =0x1000 //выдача в форме с фиксир точкой//; unibuf =0x2000 //улучшенная выдача//; stdio = 0x4000 //освобождение потока//}; Фактически в этом списке содержатся имена констант, определяющие флаги соответствующих назначений. Коду формата соответствует целый тип long. Изменить состояние флагов формата можно с помощью функции-члена класса ios, имеющий прототип long setf(long flags). Например, для установки флага showbase в активный режим применительно к стандартному потоку вывода cout, используют оператор cout.setf(ios:: showbase). Можно использовать побитовые операции: cout.seft(ios::left|ios::hex); Для выключения используется функция unsetf(long flags). Для управления форматами потокового вывода можно использовать спец функции, наз-е манипуляторами. список стандартных манипуляторов: dec – десятичный формат, endl –вывод «\n» и освобождение буфера, ends вывод NULL, flush-освободить поток, setw(int w) – установить ширину поля выдачи, ws – режим пропуска символов пробела.

19. Символьные строки организуются как массивы символов, последним из которых яв-ся символ \0, внутренний код которого равен 0. Строка описывается как символьный массив: char STR[20]; Одновременно с описанием строка может инициализироваться. Возможны два вида – с помощью строковой константы и в виде списка символов: char s[20]=’DKO’; char s[20]={‘D’, ‘K’, ‘O’, ‘\0’}. Обработка строк связано обычно с перебором всех символов от начала до конца. Признаком конца такого перебора яв-ся обнаружение нулевого символа. Для вывода строки на экран в станд библ stdio имеется функ puts(). Аргумент этой функ указывает на имя строки. В этой же библиотеке есть ф. ввода строки с клавиатуры с именем gets(). В качестве аргумента указывает на имя строки, в которую производится ввод. Среди стандартных библиотек в С++ существует и спец библиотека для работы со строками: string.h.

20. Использование строк как параметра ф. аналогично использованию массивов других типов. Однако для строк имя строки яв-ся указателем-переменной, и, следовательно, его значение может подвергаться изменению. Запишу определение ф. вычисления длины строки (strlen()): int length(char *s) {int k; for(k=0; *s++!=’\0’; k++); return k;} Здесь ф. использует механизм работу с указателем. Изменение значения ук-ля s допустимо благодаря тому, что оно яв-ся переменной. Но с числовыми данными такого делать нельзя.

21. Каждый программист встречается с необходимостью рассортировать данные. Цель сортировки-облегчить в дальнейшем поиск требуемых данных. Многие программисты пользуются специальными библ для сортировки (qsort() в Турбо Си), но в действительности же сужествуют много методов сортировки данных. Причем иногда для разных типов данным лучше применять разные методы. Каждый алгоритм сортировки можно разбить на три составляющие: 1)сравнении двух элементов, определяющее упорядоченность этой пары; 2) перестановка, меняющая местами неупорядоченную пару эл-в; 3)сортирующий алгоритм, определяющий набор эл-в для сравнения и отслеживающий общую упорядоченность массива данных. Сортировка данных в оперативке наз-ся внутренней, в файлах – внешней.

22. Реализуем это метод след образом: последовательно пройдем весь массив, сравнивая i-й эл-т со всеми, находящимися после него, и, найдя наименьший, переставим его на i-тое место. Таким образом, после перебора всех эл-тов получим отсортированный массив. void sort_min (int*x, int n) // определение ф. { int i,j,k,buf; /*проход массива, начиная с нулевого Эл-та до предпослед-го*/ for(i=0; i<n-1;i++) { /*проход массива, начиная с (i+1) до последнего*/ for(k=j; j<n; j++) //поиск наименьшего к-того Эл-та// if (*(x+j)<*(x+k)) k=j; //перемещение наименьшего Эл-та вверх// buf=*(x+k); (x+k)=*(x+i); *(x+i)=buf; }}. Данный метод считается неэффективным и редко применяется.

23. Смысл: самые «легкие» всплывают «наверх», самые «тяжелые» «тонут».Алгоритмически это можно просматривать весь массив «сверху вниз» и менять стоящие рядом Эл-ты в том случае, если «нижний» Эл-т меньше, чем «верхний». Так мы выталкиваем вниз самый «тяжелый» Эл-т всего массива. Теперь повторим операцию для тех, которые лежат «выше» найденного. void sort_bubl(int *x, int n) { int i, j, buf; for(i=0;i<n;i++) for(j=0; j<n-i-1; j++) if(*(x+j)>*(x+j+1)) {buf=*(x+j); *(x+j)= *(x+j+1); *(x+j+1)=buf;} Сортировка методом Пузырька считается самой простой и самой неэффективной.

24. Суть алгоритма- Эл-ты раздел-ся на упорядоченные и неупоряд части. Вначале упор. часть содержит только один эл-т. Очередной эл-т из начала неупор. части, при этом упор-я часть увеличивается на один Эл-т. Сортировка заканчивается, когда исчезает неупор часть. Void sort(float a[N], int n) {struct float t; int i, j, fl; for(j=0;j<n;j++) {t=a[j]; i=j-1; while (i>=0&&t<a[i]) { a[i+1]=a[i]; i++; a[i+1]=t; }}}.

25. Список-это набор Эл-в, размещаемых в динамической памяти и связанные между собой с указателями на эти эл-ты. Применяемый способ связывания Эл-в определяет тип списка. списки бывают линейными и кольцевыми, односвязными и двусвязными. Эл-т односвязного типа содержит кроме основной информации и инф о след либо предыдущ Эл-те списка. Следовательно, Эл-т двусвязного типа содержит и то, и это. Самыми распр случаями линейного односвязного типа служат стеки и очереди. Очередь – это список с таким способом связи м-у эл-тами, при котором нов эл-ты добавляются строго в конец списка, а извлекаются для обработки строго сначала. Принцип организации можно описать так: «Первым пришел, первым ушел». Стек – это список с таким способом связи между Эл-тами, при котором новые Эл-ты добавляются строго в начало списка и извлекаются для обработки также строго из начала списка, т.е. «первым пришел – последним ушел». у линейных списков в первых эл-тах указатель на предыдущий эл-т, как правило, равен 0.

26. Если указатель ссылается только на след звено, то список однонаправленный. Эл-т односвязного типа содержит кроме основной информации и инф о след либо предыдущ Эл-те списка. Самыми распр случаями линейного односвязного типа служат стеки и очереди. Очередь – это список с таким способом связи м-у эл-тами, при котором нов эл-ты добавляются строго в конец списка, а извлекаются для обработки строго сначала. Принцип организации можно описать так: «Первым пришел, первым ушел». Стек – это список с таким способом связи между Эл-тами, при котором новые Эл-ты добавляются строго в начало списка и извлекаются для обработки также строго из начала списка, т.е. «первым пришел – последним ушел». Кольцо – это список, Эл-ты которого образуют замкнутую круговую систему, т.е. последний эл-т должен содержать указатель на первый эл-т. Типовые операции над списками: 1) добавление звена в нач списка; 2)удал зв из нач списка; 3)добавление звена в произв место отличное от начала; 4)удаление //-//-//; 5)проверка, пуст ли список; 6)очистка списка.

P.S. ЕСЛИ НЕ ПОНРАВИЛОСЬ, ИДИТЕ К ЧЕРТУ! Я СТАРАЛАСЬ!!!!

Соседние файлы в папке шпоры