不得不说,单纯从学习语言来说,从用这门语言实现数据结构开始,这样会学的快,并且透彻。
我从本科开始学JAVA,用JAVA写后端,但是还不会用JAVA实现数据结构,这令我有点汗颜,好在我现在已经意识到,还不算晚。
另外还有一点需要注意,一个.JAVA文件可以写多个类,但是用public修饰的类只能有一个
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyStack ms =new MyStack();
ms.push(7);
ms.push(8);
ms.push(9);
System.out.println(ms.getLength());
int n=ms.getLength();
for(int i=0;i<n;i++)
System.out.println(ms.pop());
}
}
class MyStack {
//栈的底层我们使用数组来存储数据
int [] elements;
//构造器,初始化数组
public MyStack()
{
elements = new int[0];
}
//入栈
public void push(int element)
{
//创建一个新的数组
int [] newArr = new int[elements.length+1];
//把原数组中的元素复制到新数组中;
for(int i=0;i<elements.length;i++)
newArr[i]=elements[i];
//把添加的元素放入到新数组中;
newArr[elements.length]=element;
//使用新数组替换旧数组
elements = newArr;
}
//出栈
public int pop()
{
//栈为空时,抛出一个异常
if(elements.length == 0)
throw new RuntimeException("stack is empty");
//取出数组的最后一个元素
int element = elements[elements.length-1];
//创建一个新的数组
int [] newArr = new int [elements.length-1];
//将原数组除了最后一个元素,都放入到新的数组中
for(int i=0;i<newArr.length;i++)
newArr[i] = elements[i];
//替换数组
elements= newArr;
//返回栈顶元素
return element;
}
//查看栈顶元素
public int peek()
{
return elements[elements.length-1];
}
//判断栈是否为空
public boolean isEmpty()
{
return elements.length==0;
}
//获取栈的长度
public int getLength()
{
return elements.length;
}
}