C++ でリンク リストを使用してスタックを作成しようとしています。しかし、私が書いた表示機能は、スタックの一番上だけを出力します。なぜこれが起こっているのか本当に理解できません。どんな助けや説明も大歓迎です。ありがとう
#include<iostream.h>
#include<conio.h>
class Node
{
protected:
Node* next;
int data;
public:
Node(int d){data=d;}
friend class Stack;
};
class Stack
{
public:
Stack(){top->next='\0';length=0;}
void push(int d)
{
Node *n=new Node(top->data);
n->next='\0';
top->next=n;
top->data=d;
length++;
}
int pop()
{
top=top->next;
length--;
return top->data;
}
void displaystack()
{
while(top->next!='\0')
{
cout<<top->data<<endl;
top=top->next;
}
}
int getlength()
{
return length;
}
private:
Node *top;
int length;
};
void main()
{
clrscr();
Stack s;
s.push(9);
s.push(8);
s.push(7);
s.push(6);
s.push(5);
s.push(3);
s.displaystack();
int len=s.getlength();
cout<<"length of stack is "<<len<<endl;
getch();
}
次のように表示されるだけです: 3 スタックの長さは 6 です
--------xxxxxxx-------xxxxxxxx--------xxxxxxx-----------xxxxxxxxxxxxxxx------------ --
コードを編集すると、次のようになります。(@Kaathe に感謝) :P
#include<iostream.h>
#include<conio.h>
class Node
{
protected:
Node* next;
int data;
public:
Node(int d){data=d;}
friend class Stack;
};
class Stack
{
public:
Stack(){top->next=NULL;length=0;}
~Stack()
{
while(top!=NULL)
{
Node* toDelete=top;
top=top->next;
delete toDelete;
}
}
void push(int d)
{
Node *n=new Node(d);
n->next=top;
top=n;
length++;
}
int pop()
{
Node* oldtop=top;
top=top->next;
int oldtopdata=oldtop->data;
delete(oldtop);
--length;
return oldtopdata;
}
void displaystack()
{
Node* current=top;
while(current->next!=NULL)
{
cout<<current->data<<endl;
current=current->next;
}
}
int getlength()
{
return length;
}
private:
Node *top;
int length;
};