行列总结

队列总结

先学的是数组,数组在五子棋的作用在五子棋中体现的很微妙,但数组有个很大的缺点,数组一旦定义,大小就是固定的,而用户的需要的大小是未知的,于是就出现了队列。队列的的实现大体有两种方法,一个是用数组实现,先定义一个数组大小为零的数组,然后没加一个元素,重新定义一个新数组,长度比原长度加一;另一种实现方式是链表队列,有单链表实现的队列,也有双链表实现的队列,大体思路都差不多,还可在其中定义各种需要的方法,如插入方法,删除方法等等。。。

package LinkList20130717;
package LinkList20130717;


import LinkBook20130717.LinkNode;
import LinkBook20130717.Student;

public class LinkList {
	private static LinkNode root;
	private LinkNode last;
	private int count=0;
	//定义加入节点的方法
	public void add(Object obj){
		LinkNode temp=new LinkNode(obj);
//		temp.setObj(obj);
//		root=new LinkNode();
		if(null==root){
			root=temp;
			last=root;
		}else{
			last.setNext(temp);
			last=temp;
		}
		count++;
	}
	public static void main(String[] args){
		LinkList link=new LinkList();
		LinkNode n1=new LinkNode("一节点");
		LinkNode n2=new LinkNode("二节点");
		LinkNode n3=new LinkNode("三节点");
		LinkNode n4=new LinkNode("四节点");
		link.add(n2);
		link.add(n1);
		link.add(n4);
		link.add(n3);
		link.printLinkList(root);
	}
	//队列的大小方法
	public int size(){
		return count;
	}
	//打印方法
	public void printLinkList(LinkNode root){
		if(null!=root){
			Object data=root.getObj();
			System.out.println(data);
			LinkNode temp=root.getNext();
			printLinkList(temp);//递归
		}
	}
}
package LinkBook20130717;

public class LinkNode {
	private Object obj;//节点内的数据对象
	private LinkNode next;//对下一个节点的引用
	//定义构造方法,在创建接点对象时就传入借点中的数据对象
	public LinkNode(Object obj){
		this.obj=obj;
	}
	public Object getObj() {
		return obj;
	}
	public void setObj(Object obj) {
		this.obj = obj;
	}
	public LinkNode getNext() {
		return next;
	}
	public void setNext(LinkNode next) {
		this.next = next;
	}
	public String toString(){
		return (String)this.getObj();
	}
	

}
 
package LinkList20130717;

import LinkBook20130717.Student;
//数组变队列
public class ArrayList01 {
	private static Student[] stu=new Student[0];
	//增加元素的方法
	public void add(Student laststu){
		//1.新建数组,长度是原来数组的长度
		Student [] newstu=new Student[stu.length+1];
		//2.将增加的元素加到数组的最后一位
		newstu[stu.length]=laststu;
		//3.将原数组以前的冬冬放到新书组中
			for(int i=0;i<stu.length;i++){
				newstu[i]=stu[i];
		       }
			stu=newstu;
	}
	//取得对应位置元素的方法
	public Student get(int index){
		Student stuIndex=stu[index];
		return stuIndex;
	}
	//队列的长度
	public int size(){
		return stu.length;
	}
	//插入元素的方法
	public void insert(Student stu01,int index ){
		//1.新建数组,长度是原来数组的长度
		Student [] newstu=new Student[stu.length+1];
	
		//3.将原数组以前的冬冬放到新书组中
			for(int i=0;i<index;i++){
				newstu[i]=stu[i];
		       }
		//2.将增加的元素加到数组的指定位置
			newstu[index]=stu01;
			//将索引值以后的元素放入数组中
			for(int i=index;i<stu.length;i++){
				newstu[i+1]=stu[i];
			}
			stu=newstu;
			
	}
	public Student remove(int index){
		Student[] destu=new Student[stu.length-1];
		for(int i=0;i<index;i++){
			destu[i]= stu[i];
		}
		for(int i=index+1;i<stu.length;i++){
			destu[i-1]=stu[i];
		}
		stu=destu;//放后为何不行
		return stu[index];
		
		
	}
	//打印学生信息
//	public void print(){
//		for(int i=0;i<this.size();i++){
//			System.out.println("学生姓名"+stu[i].name+"学分"+stu[i].getScro());
//		}
//	}
	public static void main(String args[]){
		Student stua=new Student("a",1);
		Student stub=new Student("b",2);
		Student stuc=new Student("c",3);
		Student stud=new Student("d",4);
		Student stue=new Student("e",5);
		ArrayList01 array=new ArrayList01();
		array.add(stua);
		array.add(stub);
		array.add(stuc);
		array.add(stud);
		array.insert(stue, 3);
		array.remove(2);
		for(int i=0;i<array.size();i++){
			System.out.println("学生姓名"+stu[i].getName()+"学分"+stu[i].getScro());
			
		}
	}

}