문제

모두 안녕! 내 스택에 약간의 문제가 있습니다. 내가 스택에 밀어 넣은 각 요소를 인쇄하려고합니다.

스택 CTOR로 시작하여 배열에 대한 고정 크기가 있음을 알고 있습니다. 그래서 나는 그 많은 공간을 담을 수 있도록 항목 구조 객체를 할당합니다.

stack::stack(int capacity)
{   
  items = new item[capacity];

  if ( items == NULL ) {
    throw "Cannot Allocoate Sufficient Memmory";
    exit(1); 
  }
  maxSize = capacity;
  top       = -1;
}

예, 항목은 "항목"의 구조 유형입니다. 보세요 :

class stack
{
  stack(int capacity);
  ~stack(void);
...
  private:
    int maxSize; // is for the item stack
    int top;     // is the top of the stack
    struct item {
      int n;
    };
    item        *items;                 

  public:
    friend ostream& operator<<(ostream& out, stack& q)
  ...

첫 번째 및 Formost는 각 들어오는 요소를 배열 Filo로 밀어서 스택에 추가하려고합니다.

bool stack::pushFront( const int n )
{
     if ( top >= maxSize-1 ) 
{
    throw "Stack Full On Push";
    return false;
}
else 
{
    ++top;
    items[top].n = n;
}
return true;
}

// just a textbook example here:
stack::~stack(void)
{
  delete [] items;

  items    = NULL;
  maxSize = 0;
  top      = -1;
}

예, 저에게 진짜 문제는 [++ top] .n = n입니다. 성명. 스택을 밀고 나면 항목 배열을 드래그 할 수있는 방법을 찾으려고 노력했습니다.

왜 내가 그 항목을 드래그 할 수 없는지 궁금합니다. 나오는 모든 것은 'n'매개 변수로 전달되는 가치입니다. 값을 저장하려면 스택 객체 유형 배열을 사용해야합니까?

<< 연산자를 과부하하고 요소를 인쇄하려고 할 때는 미친 듯이 큰 음수를 얻습니다.

ostream& operator<<(ostream& out, stack& q)
{
    if ( q.top <= 0 ) // bad check for empty or full node
    out << endl << "stack: empty" << endl << endl;
    else
        for ( int x = 0; x < q.maxSize; x++ )
        {
            out << q.items[x].n; // try to print elements
        }
    return out;
}

누군가가 시간이 있다면 나는 길을 떠나 기여가 필요합니다!

도움이 되었습니까?

해결책

for 루프의 과부하 << 연산자에서 최대 크기 시간을 반복하고 있습니다. 그러나 최대 크기의 요소를 스택으로 밀지 않았을 수도 있습니다. 당신은 최고의 시간을 반복해야합니다. 또한 항목 구조에 대한 기본 생성자를 작성하고 인쇄 할 때 쓰레기 값을 얻지 못하도록 모든 Variblaes를 초기화하십시오.

다른 팁

스택을 인쇄 할 때는 최대 크기가 아닌 상단까지 올라 가야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top