读书人

疑点 帮忙解答C++

发布时间: 2012-10-21 09:00:07 作者: rapoo

疑问 帮忙解答C++
#include <iostream>

using namespace std;

class node
{
public:
int date;
node *next;
};

class Stack
{
private:
node *top;
public:
Stack();
~Stack();
void Push(int Date);
int Pop();
};

Stack::Stack()
{
top=NULL;//初始化 top为空时,top这结点存在吗??
}

Stack::~Stack()
{
node *p;
while(top!=NULL)
{
p=top;
top=top->next;//把上面第二个数据变为第一个 为什么是top=top->next top->next的意思不是指top后面的地址?? 而top已是最上面的数据了 它的上面应该没有了
delete p;
}
}

void Stack::Push(int Date)
{
node *n=new node();
n->date=Date;
n->next=top;//???什么意思
top=n;//????
}

int Stack::Pop()
{
int temp;
if(top==NULL)
{
cerr<<"栈为空"<<endl;
return NULL;
}
else{
temp =top->date;
top=top->next;
return temp;
}
}

int main()
{
Stack stack;
for(int i=0;i<5;i++)
{
stack.Push(i);
cout<<i<<"\t";
}
cout<<endl;
for(int j=0;j<5;j++)
{
cout<<stack.Pop()<<"\t";
}
return 0;
}



[解决办法]
我觉得楼主应该 先要弄清楚 栈的原理
栈是先进后出的 后进先出的
压入的值存放在栈顶就是top
最开始栈为空 所以top=NULL;
当压入新值时 值放在栈顶
node *n=new node();
n->date=Date;
n->next=top;//原栈顶位置被新值取代 旧栈顶值变成存放在栈顶的下一个位置
top=n;//新值在栈顶
-----------------------
p=top;
top=top->next; 后入先出原则,从栈顶弹出值 栈顶下一位置变成了新栈顶
delete p;
------------------

[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分

[解决办法]
首先node存不存在是看你有没有开辟内存来存放它。如:top=new node();
其次top=top->next的意思是top存放接下来的node的地址,这只是一种结构。top是栈头,那么它下面必然有其他节点。否则只有一个元素。
最后n->next=top;的意思是新生成一个节点,并将它与栈顶元素相连。这样就能形成一个完整的栈。top=n;的意思是为了确保top始终为栈顶元素。
[解决办法]
top=null//指针的初始化,不指向任何值
n->next=top;
top=n;
当第一个值压栈的时候,n->next被赋予的top地址为null也就是没有值(出栈的时候通过null判断是否到栈底来结束出栈),然后top=n的意思是压入的这个第一个值作为最上面的top值
当第二个值压栈的时候,n->next被赋予的top地址为第一个值的地址,top=n的意思也就是把第二个值作为最上面的top值

读书人网 >C++

热点推荐