Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 19047 / 3448 | Оценка: 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("Добро пожаловать!\n");  - на консоль выводится непонятный набор знаков вместо русского текста.