Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 12:43   #1
4atty
 
Регистрация: 24.07.2011
Сообщений: 6
Радость Стек (связный список). Нужно ли проверять на пустоту?

Всем добра,
у меня к Вам есть парочка вопросов о стеке, буду благодарен за помощь.
Передо мной стояла задача:
1) Инициализировать стек;
2) Заполнить его значениями;
3) Добавить одно значение, через консоль;
4) Удалить значение, которое добавили.
Вот мой код, он рабочий.
Код:
#include "stdafx.h"
 
struct STACK
{
    float Value;
    STACK *Link;
};
 
 struct Using_Stack
 {
    STACK *New_Var;
    void (*Init)(Using_Stack*);
    void (*Push)(Using_Stack*, float );
    float (*Pop)(Using_Stack*);
 };
 
/* INITIALIZATION */
void MyInit( Using_Stack* MyStack )
{
    MyStack->New_Var = 0;
}
 
/* PUSH */
void MyPush( Using_Stack* MyStack, float Value )
{
    STACK *New_El;
 
    New_El = new STACK;
    New_El -> Value = Value;
    New_El -> Link = MyStack -> New_Var;
    MyStack -> New_Var = New_El;
}
 
/* POP */
float MyPop( Using_Stack* MyStack )
{
    float Reading;
    if (MyStack -> New_Var == 0)
            Reading = 0;
    else
        {
            STACK *Del;
            Del = MyStack -> New_Var;
            Reading = Del -> Value;
            MyStack -> New_Var = MyStack -> New_Var -> Link;
            delete Del;
        }
    return Reading;
}
 
void main()
{
    Using_Stack *MyStack;
    MyStack = new Using_Stack;
 
    MyStack -> Init = MyInit;
    MyStack -> Push = MyPush;
    MyStack -> Pop = MyPop;
 
    MyStack -> Init(MyStack);   //Initialization of Value
 
    float Character;
 
    MyStack -> Push(MyStack, 10.5);     //Recording of Value
    MyStack -> Push(MyStack, 20.5);
 
    printf("Our Stack is");
    printf("\n\n%g", MyStack -> New_Var -> Value);
    printf("\n\n%g", MyStack -> New_Var -> Link -> Value);
    
    printf("\n\n Enter the value you want to ADD \n");
    scanf_s("%g", &Character);
    MyStack -> Push (MyStack, Character);
 
    printf("\n\n So, our Stack is");
    printf("\n\n %g", MyStack -> New_Var -> Value);
    printf("\n %g", MyStack -> New_Var -> Link -> Value);
    printf("\n %g \n", MyStack -> New_Var -> Link -> Link -> Value);
 
    printf ("\n And now we will DELETE value, which we added \n");
    float Read;
    Read = MyStack -> Pop(MyStack);     //Reading of one value
    
    printf("\n Value which we will DELETE is - ");
    printf("%g \n", Read);
 
    printf("\n And now, our Stack is");
    printf("\n\n %g", MyStack -> New_Var -> Value);
    printf("\n %g \n\n\n", MyStack -> New_Var -> Link -> Value);
    
}
Вот, собственно, мой вопрос: нужно ли проверять стек на пустоту и как это реализовать, если нужно?
Спасибо.
4atty вне форума Ответить с цитированием
Старый 13.02.2013, 12:53   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Using_Stack пуст, если его New_Var равно нулю. Как нетрудно заметить, соответствующая проверка есть в единственном месте, где она осмысленна.

Не хватает метода Destroy, который бы очищал стек.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить оператор, проверяющий «список» на пустоту. Вася_01 C# (си шарп) 5 06.11.2012 00:07
Связный список InKo1 Общие вопросы C/C++ 4 06.03.2012 01:11
Связный список InKo1 Помощь студентам 0 22.12.2011 02:08
Связный список batman01 Общие вопросы C/C++ 1 15.10.2011 01:31
Связный список С++ Шёпот Общие вопросы C/C++ 2 01.04.2011 22:56