java数据结构


* 数据结构,环状结构
1.Node<T>类
		public class Node<T> {
		public T data;
		public Node<T> next;
		}


	2.Ring<T>类
	public class Ring<T> {
	private Node<T> head;
	private Node<T> tail;
	
	public void add(T value){
		Node<T> node=new Node<T>();
		node.data=value;
		node.next=null;
		
		if(head==null){//如果头为空,头==当前加入的节点,也等于尾
			head=tail=node;
			tail.next=head;
		}
		
		else{
			node.next=tail.next;//确保当前加入的节点为尾节点
			tail.next=node;
			tail=node;
		}
	}
	public void extract(int distance){
		extract(tail,distance);
	}
	
	//提取数据,从尾部开始提取尾部的next,并迭代
	private void extract(Node<T> t,int distance){
		if(t.next==t){
			System.out.println(t.data);
			return;		
		}else{
			Node<T> n=t.next;//首先输出第一个节点,也就是尾节的next节点
			System.out.println(n.data);
			t.next=n.next;//尾节点的next为当前输出节点的下一个节点
			for(int i=0;i<distance;i++){
				t=t.next;//尾节点向后移动distance个位置迭代
			}
			extract(t,distance);
		}
	}
	
	public void show(){
		Node<T> h=head;
		while(1==1){
		System.out.println(h.data);
		h=h.next;
		}
	}
}


	3.Test类
	public abstract class test {


	/**
	 * @param args
	 */
	private  final static int DISTANCE=3;
	private  final static int COUNT=7;
	
	public static void main(String[] args) {
		Ring<String> r=new Ring<String>();
	
		r.add("张三");
		r.add("李四");
		r.add("王五");
		r.add("张六");
		r.add("钱七");
		r.add("刘二麻子");
		r.add("周大");
		r.extract(DISTANCE);
	}


}



* 链表,队列加入的元素加在最后,用迭代器遍历
import java.util.Iterator;
public class LinkTable<T> implements Iterator<T>,Iterable<T> {
	private class Node<E>{
		public E entity;
		public Node<E> next;
		
	}
	private Node<T> head;
	private Node<T> tail;
	private Node<T> current;
	
	public void add(T entity){
		Node<T> node=new Node<T>();
		node.entity=entity;
		node.next=null;
		
		if(head==null){
			head=node;
			tail=node;
		}
		else{
			tail.next=node;
			tail=node;
		}
	}


	@Override
	public boolean hasNext() {
		return current!=null;
	}


	@Override
	public T next() {
		Node<T> node=current;
		current=current.next;
		return node.entity;
	}


	@Override
	public void remove() {
		// TODO Auto-generated method stub
		
	}


	@Override
	public Iterator<T> iterator() {
		current=head;
		return this;
	}


}


*stack加在最后,只能从后面出栈
public class Stack<T> {
	private class Node<E>{
		public E entity;
		public Node<E> next;
	}
	private Node<T> head;
	public void push(T entity){
		Node<T> node=new Node<T>();
		node.entity=entity;
		node.next=null;
		
		if(head==null){
			head=node;
		}else{
			node.next=head;//新加入的node在最后
			head=node;
		}
	}
	
	public T pop(){
		Node<T> node=head;
		head=head.next;
		return node.entity;
	}
	
	public boolean empty(){
		return head==null;
	}
}

*queue 加在后面,从前面出
public class Queue<T> {
	private class Node<E>{
		public E entity;
		public Node<E> next;
	}
	private int count=0;
	private Node<T> head;
	private Node<T> tail;
	
	public void queue(T entity){
		Node<T> node=new Node<T>();
		node.entity=entity;
		node.next=null;
		
		if(head==null){
			head=tail=node;
		}else{
			tail.next=node;
			tail=tail.next;
		}
		count++;
	}
	public T deQueue(){
		Node<T> n=head;
		head=head.next;
		count--;
		return n.entity;	
	}
	public boolean empty(){
		return head==null;
	}
	public int size(){
		return count;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值