数据结构课程设计_双向循环链表

package chCircleTwoLinkedList;

import java.util.Scanner;

public class CircleTwoLinkedList{
	private int theSize=0;
	private Node beginMarker;
	private Node endMarker;
	static Scanner cin=new Scanner(System.in);
	public CircleTwoLinkedList(){
		beginMarker=new Node();
		endMarker=new Node();
		beginMarker.prev=endMarker;
		beginMarker.next=endMarker;
		endMarker.prev=beginMarker;
		endMarker.next=beginMarker;
		theSize=0;
	}
	public void setSize(int theSize){
		this.theSize=theSize;
	}
	public int getSize(){
		return theSize;
	}
	public boolean isEmpty(){
		if(theSize==0)
			return true;
		else
			return false;
	}
	public AnyType getData(int idx){
		return getNode(idx).data;
	}
	public Node getNode(int idx){
		Node p=new Node();
		if(idx<0||idx>getSize()){
			throw new IndexOutOfBoundsException("getNode idx:"+idx+";size:"+getSize());
		}
		if(idxidx;i--){
				p=p.prev;
			}
		}
		return p;
	}
	public boolean add(AnyType x){
		add(theSize,x);
		return true;
	}
	public void add(int idx,AnyType x){
		Node p=new Node(x);
		if(idx==0){
			/*p.next=beginMarker.next;
			beginMarker.prev.next=p;
			p.prev=beginMarker=endMarker;
			endMarker.prev=p;*/
			p.next=beginMarker.next;
    		beginMarker.next.prev=p;
    		beginMarker.next=p;
    		p.prev=beginMarker;
		}
		else if(idx==theSize){
			/*p.prev=endMarker.prev;
			endMarker.prev=p;
			p.next=endMarker;*/
			p.prev=endMarker.prev;
    		endMarker.prev.next=p;
    		endMarker.prev=p;
    		p.next=endMarker;
		}
		else{
			/*Node Q;
			Q=getNode(idx-1);
			Q.next=p;
			p.prev=Q;
			p.next=getNode(idx);
			getNode(idx).prev=p;*/
			Node q;
    		q=getNode(idx-1);
    		p.next=q.next;
    		q.next.prev=p;
    		q.next=p;
    		p.prev=q;
		}
		theSize++;
	}
	public boolean remove(int idx){
		Node p=new Node();
		if(idx<0||idx>getSize())
			return false;
		else{
			p=getNode(idx);//把要删除的节点赋给p,对p进行操作;
			p.prev.next=p.next;
			p.next.prev=p.prev;
			theSize--;
			return false;
		}
	}
	public CircleTwoLinkedList reverseLinkedList(CircleTwoLinkedList p){
		Node q;
		for(int i=0;i p){
		beginMarker.prev=p.next;
		beginMarker.prev.next=p.prev;
		theSize++;
	}
	public void reverse( CircleTwoLinkedList p){
		CircleTwoLinkedList q=p;
		System.out.println("逆置后的链表为:");
		reverseLinkedList(q);
		System.out.println();
		
	}
	public void menu(CircleTwoLinkedList p){
		System.out.println("1:建立一个空表;");
		System.out.println("2:插入第i个节点;");
		System.out.println("3:删除第i个节点;");
		System.out.println("4:插入第1个节点;");
		System.out.println("5:插入最后一个节点;");
		System.out.println("6:逆置;");
		System.out.print("请选择:");
		Scanner cin=new Scanner(System.in);
		int a=cin.nextInt();	
		switch(a){
			case 1:JianLiNull();menu(p);break;
			case 2:addI(p);menu(p);break;
			case 3:removeI(p);menu(p);break;
			case 4:addFirst(p);menu(p);break;
			case 5:addLast(p);menu(p);break;
			case 6:reverse(p);menu(p);break;
			default:break;
		}
	}
	public static void main(String[] args) {
		CircleTwoLinkedList cl_0=new CircleTwoLinkedList();
		System.out.print("请输入链表的长度:");
		int i=cin.nextInt();
		System.out.println("请输入链表的元素:");
		for(int j=0;j p=new Node();
		p=cl_0.beginMarker;
		System.out.println("您的链表为:");
		for(int j=0;j {

	public AnyType data;
	public Node prev;
	public Node next;
	public Node(){
		data=null;
		prev=null;
		next=null;
	}
	public Node(AnyType d){
		data=d;
		prev=next=null;
	}
	public Node(AnyType d,Node p,Node n){
		data=d;
		prev=p;
		next=n;
	}
}

你可能感兴趣的:(数据结构,数据结构)