Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17108 / 2712 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 16:

Функции в примерах

< Лекция 15 || Лекция 16: 123456

Структуры данных

Решение комбинаторных задач предполагает выделение структур сложного типа с их последующей реализацией средствами выбранного языка программирования. При этом структура данных может не зависеть от конкретных языковых конструкций (абстрактная структура данных ).

Под структурой данных понимают совокупность элементов фиксированных типов и набор базисных операций, определяющих организацию и способ обработки данных.

Рассмотрим некоторые основные структуры данных.

Стеки

Стеком называется структура данных, загрузка или увеличение элементов для которой осуществляется с помощью указателя стека в соответствии с правилом LIFO ( last-in, first-out - последним введен, первым выведен).

Указатель стека sp (stack pointer) содержит в любой момент времени индекс (адрес) текущего элемента, который является единственным элементом стека, доступным в данный момент времени для работы со стеком (для случая, когда указатель стека всегда задает ячейку, находящуюся непосредственно над его верхним элементом).

  1. Начальная установка:
    sp=1;
  2. Загрузка элемента х в стек:
    stack[sp]=x;
    sp=sp+1;
  3. Извлечение элемента из стека:
    sp=sp-1;
    x=stack[sp];
  4. Проверка на переполнения и загрузка элемента в стек:
    if(sp<=sd) {stack[sp]=x;sp=sp+1}
    else// переполнение

    Здесь sd - размерность стека.

  5. Проверка наличия элементов и извлечение элемента стека:
    if (sp>1){sp=sp-1;x=stack[sp]} //антипереполнение
  6. Чтение данных из указателя стека без извлечения элемента:
    x=stack[sp-1];

Очереди

Очередь - одномерная структура данных, для которой загрузка или извлечение элементов осуществляется с помощью указателей начала ( head ) и конца ( tail ) очереди в соответствии с правилом FIFO ( first-in, first-out - первым введен, первым выведен).

  • Начальная установка:
    head=1; tail=1;
  • Добавление элемента:
    queue[tail]=x; tail=tail+1;
    if(tail>qd) tail=1;

    Здесь qd - размерность очереди.

  • Исключение элемента:
    x=queue[head]; head=head+1;
    if(head>qd) tail=1;
  • Проверка переполнения очереди и включение в нее элемента:
    temp=tail+1;
    if(temp=head)
    {Переполнение}
    else {queue[tail]=x; tail=temp}
  • Проверка наличия элементов и исключение элемента х:
    if(head==tail) { очередь пуста}
    else{ x=queue[head]; head=head+1;
    if(head>qd) head=1;}

Отметим, что, при извлечении элемента из очереди, все элементы могут также перемещаться на один шаг к ее началу.

< Лекция 15 || Лекция 16: 123456
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Александр Серый-Казак
Александр Серый-Казак
Россия
Максим Виноградов
Максим Виноградов
Россия, Москва