문제
모두 안녕! 내 스택에 약간의 문제가 있습니다. 내가 스택에 밀어 넣은 각 요소를 인쇄하려고합니다.
스택 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를 초기화하십시오.
다른 팁
스택을 인쇄 할 때는 최대 크기가 아닌 상단까지 올라 가야합니다.
제휴하지 않습니다 StackOverflow