организация стэка
От: frenchman  
Дата: 22.03.06 01:57
Оценка:
Привет, народ.

Вот написал простейший стэк, но есть один баг :
при декрементировании указателя все работает OK, но если этого не сделать, то после вызова pop()
первый элемент выводится ноль, а дальше — вывод стэка сдвинут.

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

Заранее благодарю!

Вот мой код (баг с указателем прокомментирован):
Возможно, есть другие ошибки... прошу прокомментировать )

 
#include<iostream>
#include<conio.h>
#include<stdlib.h>

using namespace std;




#define ARRSIZE 6

int *sp = NULL;

int tos = 5;
int array[5] = {1,2,3,4,5};


void push(int *array);
void pop();

int main()
{
    sp = array;

    for(int i = 0; i < 5; i++)
        push(  &array[i] );
    
    pop();
    getch();
    return 1;
}


    
void push( int arr[] ) 
{
    if( (*sp) == ARRSIZE )
    
    {
        cout << "Stack overflow" << "\n";
        getch();
        exit(0);
    }

   
    sp = arr;
    cout << (*sp);
    sp++;
    ++tos;

}

void pop()
{
    --sp; // БАГ!!!!!!!!если убрать эту инструкцию, то все сдвигается на 1элемент == 0 !!!!!!
    cout << "\n";
    for(int i = 0; i < 5; i++ )
       
    if (*sp == tos )
    {
    cout << "Stack is empty!";
    getch();
    exit(0);
    }
        else
        {
            cout << *sp;
            --sp;
        }
}

Добавлено форматирование, удалён хвост из пустых строк. — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.