Что это значит на самом деле «Реализация стека»? - PullRequest
3 голосов
/ 12 июля 2010

Мой профессор просит меня взять стек? Он хочет, чтобы я нарисовал это в действии ? Я чувствую себя глупо, но никто не говорил мне об этом! Спасибо за вашу помощь.

Ух ты, ребята, быстрые. Уже спасибо Полный вопрос: рассмотрим два стека, каждый из которых имеет размер n (т.е. каждый может содержать максимум n элементов). Если сумма количества элементов в двух стеках равна n, то любая дополнительная операция PUSH должна привести к ошибке переполнения. (Примечание. Ваша реализация должна учитывать тот факт, что элементы должен POP противоположен порядку, в котором они нажимаются).

*** Я не спрашиваю ответа, мне просто интересно ... как вы думаете, что он просит меня сделать? Потому что он до сих пор не ответил на мое письмо, и мне нужно, чтобы это было сделано до полуночи.

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

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

Стеки фиксированного размера (n) могут быть легко реализованы в виде массива с текущей глубиной стека, но у вас есть дополнительные возможностиназначение, поскольку вам разрешено иметь только n элементов в обоих стеках, а не каждый стека.

Я бы реализовал это следующим образом (псевдо-код только потому, что это домашнее задание и, в любом случае, вы не указали язык):

# Create the two stacks, each of size sz.
init_stack (sz):
    allocate stack1 as array[1 to sz] of integer
    allocate stack2 as array[1 to sz] of integer
    set stack1sz to 0
    set stack2sz to 0
    set maxsz to sz

# Push the value val onto stack stk.
push_stack (stk,val):
    if stk is not equal to 1 or 2:
        return error
    if stack1sz + stack2sz is equal to maxsz:
        return error
    if stk is 1:
        add 1 to stack1sz
        set element stack1sz of stack1 to val
    else:
        add 1 to stack2sz
        set element stack2sz of stack2 to val

# Pop a value off stack stk.
pop_statkck (stk):
    if s is not equal to 1 or 2:
        return error
    if stk is 1:
        if stack1sz is 0:
            return error
        set val to element stack1sz of stack1
        subtract 1 from stack1sz
    else:
        if stack2sz is 0:
            return error
        set val to element stack2sz of stack2
        subtract 1 from stack2sz
    return val

Переменные stack1, stack2, stack1sz, stack2sz и maxsz должны быть объявлены таким образом, чтобы они сохранялись между вызовами функций (т. Е. Не локальными).Все остальные являются временными.

Если у вас возникли проблемы с преобразованием этого в определенный язык, оставьте комментарий, и я предоставлю указатели того, что искать.

1 голос
/ 12 июля 2010

Учитывая описание вашего профессора, он почти наверняка просит вас написать стек вручную.

То есть, пишите (кодируйте) ваш абстрактный тип данных стека, связанные с ним операции - push и pop, как минимум, и какой-то драйвер для проверки того, что ваш стек работает должным образом и следует спецификации(ошибки переполнения и т.п.).

Знаете ли вы что-нибудь о стеках?Вы были в лекции / лаборатории на стеки, если таковые были доступны?Что ваш учебник или любимый веб-сайт говорит о них?

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

...