class node { int data; } class MyStack //null是代表不确定的对象 { private ArrayList<node>top=new ArrayList<node>(); private node rear[]; //用这个的话只能同过node加Index下标的索引去得到数组的大小 public boolean pushStack(node elem) { rear=new node[12]; //1、new 出的时引用 node ee=new node(); //new 出的是对象再返回一个引用 ee.data=666; rear[0]=ee; top.add(elem); //2、将new出来的引用代替之前的null return true; //3、1和2中这两种创建空间时创建的内容都相同,只不过ArrayList是动态的 } public node popStack() {
struct node
{
int data;
};
//显然,在C++中NULL
的值和0
是等价的。然而这就引发了一个严重的重载问题,例如下面两个函数:
//void fun(int a, int *b); void fun(int a, int b);
//可以看出我们想调用的是:void fun(int a, int *b);
但实际上我们调用的是第二个函数
//而C++11中添加的nullptr
就可以解决这个重载问题,减少很多不必要的BUG,编译环境允许的话,还是多多使用nullptr
吧。
class MyStack //NULL代表的是值#define NULL ((void *)0)
{
private:
node * data=NULL;
node * rear=NULL;
public:
bool InitStack()
{
data=new node[10]; //这个new是真正的创建了对象,而不是空引用但是这个对象是空的
//简单的说就是有空间没内容,而java是引用既没空间又没内容(自己这么一说让我觉得java还更加好些)
//(因为反正数据要随着空间一起过来,提前放空间与放引用都一样,而且刚开始便分配空间反而会造成空间的浪费)
//(可能相同的程序用c++要比用java用更多的空间)
rear=data;
return true;
}
bool pushStack(node &elem)
{
*data++=elem; //node * data与data[0]=elem和java中的node top[]与top[0]=elem最终的表现形式不是都相同的吗
//不同的是在访问数组的时候c++的指针可以通过位移用指针直接访问而java中如果是数组的只能用下标
//如果是ArrayList接口的具体实现类的话可以用它里面封装的方法如get,set remove等
//所以说java中要用这种具体的类去做数组的封装已实现一些c++中的指针的功能
return true;
}
node popStack()
{
return *--data;
}
};
System.out.println(rear[0].data); return top.remove(top.size()-1); } public int GetSize() { return top.size(); } }