没做笔记。。
要想用 new,这个类要有一个默认的构造函数
public class Coordinate { private int x; private int y; Coordinate(int x,int y){ this.x=x; this.y=y; } void PrintCoordinate(){ System.out.println("("+x+","+y+")"); } }
public class Mystackmain { public static void main(String[] args) { Mystack p=new Mystack(5); p.push('h'); p.push('e'); p.push('l'); p.push('l'); p.push('0'); p.StackTraverse(false); System.out.println(p.StackLength()); p.pop(); p.pop(); p.StackTraverse(false); System.out.println(p.StackLength()); if(p.isEmpty()){ System.out.println("栈为空"); } if(p.isFull()){ System.out.println("栈为满"); } p.DeleteMystack(); }
public class Mystack { private int head; private char[] stack; private int StackLength; private int StackCapacity; Mystack(int StackCapacity){ this.StackCapacity=StackCapacity; head=-1; StackLength=0; stack=new char[StackCapacity]; } void DeleteMystack(){ stack=null; } boolean isFull(){ if(head+1==StackCapacity){ return true; } return false; } boolean isEmpty(){ if(head==-1){ return true; } return false; } void ClearStack(){ head=-1; StackLength=0; } int StackLength(){ return StackLength; } boolean push(char k){ if(isFull()){ return false; } head++; stack[head]=k; StackLength++; return true; } boolean pop(){ if(isEmpty()){ return false; } System.out.println("出栈元素为"+stack[head]); head--; StackLength--; return true; } void StackTraverse(boolean isFromTop){ if(!isFromTop){ for(int i=0;i<=head;i++){ System.out.print(stack[i]); } System.out.println(); } else { for (int i = head; i >= 0; i--) { System.out.print(stack[i]); } System.out.println(); } }
java实现
当成员变量比较复杂时要用到拷贝构造函数
插入栈元素要注意的问题:
当定义的类的成员变量是复杂数据类型如指针等,在构造函数中分配了内存,需要用拷贝构造函数和赋值运算符
当数据类型比较简单就可以直接使用默认的构造函数和默认的赋值运算符
堆中事例化对象时,类中的构造函数的参数需要有默认值
m_pBuffer = new char[size]; 使用new动态申请了size个char类型大小的空间,如果把char换成类名时,就是申请size个类名大小的空间。但只要是给类实例化对象申请空间,就要调用类的构造函数,而所写的构造函数如果是 Coordinate(int x , int y ); 不是默认构造函数,参数没有默认值,在实例化对象时,就必须给赋予x,y值,否则就会报错,而使用new运算符申请多个内存时,无法为每个对象都赋初值x,y。那样就会报错。因此就需要将构造函数改为有默认值的构造函数 Coordinate(int x = 0, int y = 0); 这样的话编译就可以通过了,但每个对象的x,y值都是0 .
1
.