singlepost

Строгое определение классической очереди и стэка. << На главную или назад  

хочется знать как же эти структуры данных нужно реализовывать ?

15 ответов в теме “Строгое определение классической очереди и стэка.”

Страницы: [1] 2 »

  1. 1
    Леонид Максимов ответил:

    А. Ахо, Дж. Хопкрофт, Д. Ульман. Структуры Данных и Алгоритмы.

  2. 2
    Нгамдкхе Кверос ответил:

    стек и очередь это некоторый механизм подразумевающий возможность
    - добавлять туда данные
    - изымать их
    -проверка на то что очередь или стек пусты.

    очередь продарумевает что привзятии данных из очереди ты возьмёшь первое что туда клали, а в стеке последнее.
    сравнить можно со стопкой карт, когда кладёшь кладёшь наверх, когда берёшь в случае очереди всегда снизу, в случае стека всегда сверху.

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

  3. 3
    Подмогаев Свят ответил:

    меня интересует например такой момент.
    Почему инициализацию массива требуется производить n+1 количеством элементов ?..это по Шилдту
    почему у того же самого Шилдта к примеру при работе с Си не задействуется нулевой элемент массива ?

  4. 4
    Леонид Максимов ответил:

    вы хотя бы книжку назовите. а лучше приведите отрывок, который не понятен. может, вы невнимательно читаете?

  5. 5
    Юрий Лисичкин ответил:

    имхо понятие стека и очереди определяют интерфейс, предусловия и постусловия методов, а не реализацию.
    нет?

  6. 6
    Юрий Лисичкин ответил:

    хотя можно ограничиться просто предусловиями и постусловиями проводимых над стеком операций…

  7. 7
    Подмогаев Свят ответил:

    Леонид
    из полного справочника по С

    #include <stdio.h>
    #include <stdlib.h>

    #define SIZE 50

    void push(int i);
    int pop(void);

    int*tos, *p1, stack[SIZE];

    int main(void)
    {
    int value;

    tos = stack; /* tos ссылается на основание стека */
    p1 = stack; /* инициализация p1 */

    do {
    printf("Введите значение: ");
    scanf("%d", &value);

    if(value != 0) push(value);
    else printf("значение на вершине равно %d\n", pop());

    } while(value != -1);

    return 0;
    }

    void push(int i)
    {
    p1++;
    if(p1 == (tos+SIZE)) {
    printf("Переполнение стека.\n");
    exit(1);
    }
    *p1 = i;
    }

    int pop(void)
    {
    if(p1 == tos) {
    printf("Стек пуст.\n");
    exit(1);
    }
    p1–;
    return *(p1+1);
    }

    указатель вначале инкрементируется, а лишь затем но нему записываются значение.
    то бишь выходит, что элемент массива stack[0] не задействуется

  8. 8
    Николай Митропольский ответил:

    Дейсвительно… Ну видимо автору так захотелось). А вообще меньше читайте Шилдта) Особенно Полный справочник по С

  9. 9
    Леонид Максимов ответил:

    элемент 0 используется, но не для хранения, а для обеспечения наглядности кода:

    if(p1 == tos) {
    printf("Стек пуст.\n");
    exit(1);
    }

    вообще же можно было вместо

    p1–;
    return *(p1+1);

    написать

    return *p1–;

    но это не сделано в тех же целях – ради наглядности.

  10. 10
    Подмогаев Свят ответил:

    то бишь реализация оных структур данных не является строгим стандартом ?
    И главная цель лишь этих самых структур функционирование ?

Страницы: [1] 2 »

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.