算法(第四版) 1.3答案

<strong>1.3.1</strong>
public boolean isFull()
{
    return N == a.length();
}
1.3.2
 
was best the of times was it the

1.3.3

a √ b × cdef×g×h

1.3.4

<span style="white-space:pre">	</span>public boolean checkMatch(Item item)//这个方法是在stack类中实现的
	{
		Item tmp = pop();
		
		if(tmp == (Character)'[' && item == (Character)']') return true;
		if(tmp == (Character)'(' && item ==(Character) ')') return true;
		if(tmp == (Character)'{' && item == (Character)'}') return true;
		return false;
	}
	public static void main(String[] args)
	{
		Stack<Character> stack = new Stack<Character>();
		String input;
		input = StdIn.readString();
		for(int i = 0;i<input.length();i++)
		{
			char tmp = input.charAt(i);
			if(tmp == '[' || tmp == '(' || tmp == '{') stack.push(tmp);
			else if(tmp == ']' || tmp == ')' || tmp == '}') 
					if(stack.checkMatch(tmp)) continue;
					else 
					{
						StdOut.println("false");
						return;
					}
			else 
				{
					StdOut.println("bad input");
					return;
				}
			 
				
		}
		StdOut.println("true");
	
	}
1.3.5 除二逆序取余

1.3.6 将队列中的数字逆序

1.3.7 

	public Item peek()
	{
		return first.item;
	}
1.3.8 1 it

1.3.9 

1.3.13 b、c和d

1.3.14

public class FixedCapacityQueue<Item>
{
	private Item[] a;
	private int N;
	private int head;//删除在队头
	private int tail;//插入在队尾
	public FixedCapacityQueue(int capacity)
	{
		a = (Item[]) new Object[capacity];
		N = 0;
		head = -1;
		tail = -1;
	}
	
	public boolean isEmpty()
	{
		return N == 0;
	}
	
	public boolean isFull()
	{
		return N == a.length;
	}
	public int size()
	{
		return N;
	}
	
	private int indexPlus(int num)
	{
		if(++num == a.length) return 0;
		else return num;
	}
	public void enQueue(Item item)
	{
		if(isFull())
			StdOut.println("Queue is full");
		else
		{
			N++;
			tail = indexPlus(tail);
			a[tail] = item;
		}
	}
	
	public Item deQueue()
	{
		if(isEmpty())
		{
			StdOut.println("Queue is empty");
			return null;
		}
		else
		{
			N--;
			head = indexPlus(head);
			Item item = a[head];
			a[head] = null;
			return item;
			
		}
	}	
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		FixedCapacityQueue<Integer> queue = new FixedCapacityQueue<Integer>(10);
		queue.deQueue();
		for(int i = 0;i<11;i++)
			queue.enQueue(i);
		for(int i =0;i<10;i++)
			StdOut.println(queue.deQueue());
	}

}

public class ResizeArrayQueue<Item>
{
	private Item[] a = (Item[])new Object[1];
	private int N=0;
	private int head = -1;
	private int tail = -1;
	public ResizeArrayQueue()
	{
		N = 0;
		head = -1;
		tail = -1;
	}
	
	public boolean isEmpty()
	{
		return N == 0;
	}
	
	public boolean isFull()
	{
		return N == a.length;
	}
	
	public int size()
	{
		return N;
	}
	
	private void resize(int capacity)//most 
	{
		Item[] tmp = (Item[]) new Object[capacity];
		
		int tmpHead = -1;
		int tmpTail = -1;
		for(int i = 0;i<N;i++)
		{
			if(++tmpTail == tmp.length) tmpTail = 0;
			if(++head == a.length) head = 0;
			tmp[tmpTail] = a[head];
		}
		a = tmp;
		head = tmpHead;
		tail = tmpTail;
	}
	
	private int indexPlus(int num)
	{
		if(++num==a.length) return 0;
		else return num;
	}
	public void enQueue(Item item)
	{
		if(isFull()) resize(2 * N);
		tail = indexPlus(tail);
		a[tail] = item;
		N++;
	}
	
	public Item deQueue()
	{
		if(isEmpty())
		{
			StdOut.println("queue is empty");
			return null;
		}
		else
		{
			N--;
			head = indexPlus(head);
			Item item = a[head];
			a[head] = null;
			if(N == a.length/4) resize(a.length/2);
			return item;
		}
	}

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		ResizeArrayQueue<Integer> queue = new ResizeArrayQueue<Integer>();
		for(int i = 0;i<10;i++)
		{
			queue.enQueue(i);
			//StdOut.println(queue.size());
		}
		for(int i= 0;i<10;i++)
			StdOut.println(queue.deQueue());

	}

}

1.3.15

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		ResizeArrayQueue<String> queue = new ResizeArrayQueue<String>();
		while(!StdIn.isEmpty())
		{
			queue.enQueue(StdIn.readString());
		}
		int N = Integer.parseInt(args[0]);
		int size = queue.size();
		for(int i =0;i<(size-N);i++)
			queue.deQueue();
		StdOut.println(queue.deQueue());
	}

1.3.16
	public static Date[] readDates()
	{
		ResizeArrayQueue<Date> queue = new ResizeArrayQueue<Date>();
		while(!StdIn.isEmpty())
		{
			int m = StdIn.readInt();
			int d = StdIn.readInt();
			int y = StdIn.readInt();
			Date tmp = new Date(m,d,y);
			queue.enQueue(tmp);
		}
		int size= queue.size();
		Date[] result = new Date[size];
		for(int i = 0;i<size;i++)
		{
			result[i] = queue.deQueue();
		}
		return result;
	}
1.3.17方法同上

链表练习

1.3.19

public static List deleteEnd(List first)
{
<span style="white-space:pre">	</span>if(first == null) return null;
<span style="white-space:pre">	</span>if(first.next == null) first=null;
<span style="white-space:pre">	</span>else 
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>List current = first;
<span style="white-space:pre">		</span>while(current.next.next != null) current = current.next;
<span style="white-space:pre">		</span>current.next = null;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>return first;
}

 
1.3.20 
public static List delete(List first,int k)
{
<span style="white-space:pre">	</span>if(first == null) return null;
<span style="white-space:pre">	</span>if(k == 1) first = first.next; 
<span style="white-space:pre">	</span>k = k - 1;
<span style="white-space:pre">	</span>List current = first;
<span style="white-space:pre">	</span>while(--k>0 && current.next !=null)
<span style="white-space:pre">		</span>current = current.next;
<span style="white-space:pre">	</span>if(k == 0&&current.next != null)
<span style="white-space:pre">		</span>current.next = current.next.next;
<span style="white-space:pre">	</span>return first;
}
	
1.3.21 
public static boolean find(List first,String key)
{
<span style="white-space:pre">	</span>while(first !=null)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>if(first.item == key) return true;
<span style="white-space:pre">		</span>first = first.next;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>return false;
}
1.3.24 
public static void removeAfter(List node)
{
<span style="white-space:pre">	</span>if(node == null || node.next == null) return;
<span style="white-space:pre">	</span>node.next = node.next.next;
}
1.3.25
	public static void insertAfter(List node1,List node2)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>if(node1 == null || node2 == null) return;
<span style="white-space:pre">		</span>List tmp = node1.next;
<span style="white-space:pre">		</span>node1.next = node2;
<span style="white-space:pre">		</span>node2.next = tmp;
<span style="white-space:pre">	</span>}
1.3.26
<span style="white-space:pre">	</span>public static List remove(List first,String key)
	{
		if(first == null) return null;
		if(first.next == null && first.item == key) return null;
		else if(first.next == null) return first;
		List current = first;
		while(current.next.next != null)
		{
			if(current.next.item == key) 
			{
				current.next = current.next.next;
				continue;
			}
			current = current.next;
		}
		if(current.next.item == key) current.next = null;
		if(first.item == key) first = first.next;
		return first;
		
	}
1.3.27
	public static int max(List first)
	{
		int most = 0;
		if(first == null) return 0;
		while(first != null)
		{
			if((int)(first.item) > most) most =(int)first.item;
			first = first.next;
		}
		return most;
	}

1.3.28
<span style="white-space:pre">	</span>public static int max(int a, int b)
	{
		if(a>=b) return a;
		else return b;
	}
	
	public static int maxDigui(List first)
	{
		
		if(first == null) return 0;
		return max(maxDigui(first.next),(int)first.item);
	}

1.3.29

public class CircleQueue<Item>
{
	private class Node
	{
		Item item;
		Node next;
	}
	
	//private Node head;
	private Node last;
	private int N;
	
	public boolean isEmpty()
	{
		return N == 0;
	}
	public int size()
	{
		return N;
	}
	
	public void enQueue(Item item)
	{
		Node oldLast = last;
		last = new Node();
		last.item = item;
		if(isEmpty()) last.next = last;
		else
		{
			last.next = oldLast.next;
			oldLast.next = last;
		}
		N++;
	}
	
	public Item deQueue()
	{
		Item item = last.next.item;
		N--;
		if(isEmpty()) last =null;
		else 
		{
			last.next = last.next.next;
		}
		return item;
	}
	
	
	
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		CircleQueue<Integer> queue = new CircleQueue<Integer>();
		for(int i = 0;i<10;i++)
			queue.enQueue(i);
		for(int i = 0;i<10;i++)
			StdOut.println(queue.deQueue());
		
		
	}

}
1.3.31

public class DoubleNode<Item>
{
	private class Node
	{
		public Item item;
		public Node next = this;
		public Node privious = this;
		public Node(Item data)
		{
			item = data;
			
		}
		
	}
	private int size;
	private Node head = new Node(null);
	
	public void addFirst(Item data)
	{
		Node newNode = new Node(data);
		newNode.next = head.next;
		newNode.privious = head;
		head.next = newNode;
		newNode.next.privious = newNode;
		size++;
	}
	
	public void addLast(Item data)
	{
		Node newNode = new Node(data);
		newNode.next = head;
		newNode.privious = head.privious;
		head.privious = newNode;
		newNode.privious.next = newNode;
		size++;
	}
	
	public void removeFirst()
	{
		head.next = head.next.next;
		head.next.next.privious = head;
		size--;
	}
	
	public void removeLast()
	{
		head.privious = head.privious.privious;
		head.privious.privious.next = head;
		size--;
	}
	
	public void insertAfter(Item data,Node x)
	{
		Node newNode = new Node(data);
		newNode.next = x.next;
		newNode.privious = x;
		x.next = newNode;
		newNode.next.privious = newNode;
		size++;
	}
	
	public void insertBefore(Item data,Node x)
	{
		Node newNode = new Node(data);
		newNode.next = x;
		newNode.privious = x.privious;
		x.privious = newNode;
		newNode.privious.next = newNode;
		size++;
	}
	
	public void delete(Node x)
	{
		x.privious.next = x.next;
		x.next.privious = x.privious;
		size--;
	}
	
	public void printAll()
	{
		Node current = head.next;
		for(int i = 0;i<size;i++)
		{
			StdOut.println(current.item);
			current = current.next;
		}
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		DoubleNode<String> head = new DoubleNode<String>();
		head.addLast("q");
		head.addLast("w");
		head.addFirst("e");
		head.addFirst("r");
		head.printAll();
	}

}

1.3.32

public class Steque<Item>
{
	private class Node
	{
		Item item;
		Node next;
	}
	
	private int size;
	private Node head;
	private Node tail;
	
	public boolean isEmpty()
	{
		return size == 0;
	}
	
	public int size()
	{
		return size;
	}
	
	public void push(Item data)//对head进行操作
	{
		Node oldHead = head;
		head = new Node();
		head.item = data;
		if(isEmpty()) tail = head;
		else head.next = oldHead;
		
		size++;
	}
	
	public Item pop()
	{
		Item item = head.item;
		head = head.next;
		size--;
		if(isEmpty()) tail = null;
		return item;
	}
	
	public void enqueue(Item data)
	{
		Node oldTail = tail;
		tail = new Node();
		tail.item = data;
		if(isEmpty()) head= tail;
		else oldTail.next = tail;
		size++;
	}
	public void printAll()
	{
		Node current = head;
		while(size-->0)
		{
			StdOut.println(current.item);
			current = current.next;
		}
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Steque<Integer> stq = new Steque<Integer>();
		stq.push(1);
		stq.push(2);
		stq.push(3);
		stq.enqueue(4);
		stq.enqueue(5);
		stq.pop();
		stq.pop();
		stq.printAll();
	}

}
<strong>1.3.33</strong>
import java.util.Iterator;

public class Deque<Item> implements Iterable<Item>
{
	private class Node
	{
	public	Node next = this;
	public	Node previous = this;
	public	Item item;
	public Node(Item data)
	{
		item = data;
	}
	}
	
	private Node last = new Node(null);
	private int size;
	
	public boolean isEmpty()
	{
		return size == 0;
	}
	
	public int size()
	{
		return size;
	}
	
	public void pushleft(Item data)//在前面
	{
		Node newNode = new Node(data);
		newNode.previous = last;
		newNode.next = last.next;
		last.next = newNode;
		newNode.next.previous = newNode;
		size++;
	}
	
	public Item popleft()
	{
		Item ret = last.next.item;
		last.next = last.next.next;
		last.next.next.previous = last;
		size--;
		return ret;
	}
	
	public void pushRight(Item data)
	{
		Node newNode = new Node(data);
		newNode.next= last;
		newNode.previous = last.previous;
		last.previous = newNode;
		newNode.previous.next = newNode;
		size++;
	}
	
	public Item popRight()
	{
		Item ret = last.previous.item;
		last.previous = last.previous.previous;
		last.previous.previous.next = last;
		size--;
		return ret;
	}
	
	public void printAll()
	{
		Node current = last.next;
		int N = size;
		while(size>0)
		{
			StdOut.println(current.item);
			current = current.next;
			size--;
		}
	}
	
	public Iterator<Item> iterator() 
	{
		return new ListIterator();
	}
	
	private class ListIterator implements Iterator<Item>
	{
		private int N = size;
		private Node current = last.next;
		public boolean hasNext()
		{
			return N>0;
		}
		
		public void remove() {}
		
		public Item next()
		{
			Item item  = current.item;
			current= current.next;
			return item;
		}
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Deque<Integer> deque = new Deque<Integer>();
		deque.pushleft(1);
		deque.pushleft(2);
		deque.pushRight(3);
		deque.pushRight(4);
		deque.printAll();

	}

}
public class ResizingArrayDeque<Item>
{
	private int head=-1;
	private int tail=-1;
	private int size;
	Item[] a= (Item[])new Object[1];
	
	public boolean isEmpty()
	{
		return size == 0;
	}
	public int size()
	{
		return size;
	}
	
	public void resize(int cap)//
	{
		Item[] tmp = (Item[]) new Object[cap];
		int newHead= 0;
		int newTail = -1;
		
		for(int i = 0;i<size;i++)
		{
			if(++newTail >= a.length) newTail = 0;
			tmp[newTail] = a[head];
			if(++head >= a.length) head = 0;
		}
		a = tmp;
		head = newHead;
		tail = newTail;
	}
	
	public void pushLeft(Item data)
	{
		if(size == a.length) resize(2*size);
		
		if(--head<0) head = a.length-1;
		a[head] = data;
		//StdOut.println(a[0]);
		size++;
	}
	
	public Item popLeft()
	{
		Item item = a[head];
		//StdOut.println(head);
		if(++head == a.length) head = 0;
		size--;
		if(size == a.length/4) resize(a.length/2);
		return item;
	}
	
	public void pushRight(Item data)
	{
		if(size == a.length) resize(2*size);
		if(++tail == a.length) tail = 0;
		a[tail] = data;
		size++;
	}
	
	public Item popRight()
	{
		Item item = a[tail];
		if(++tail == a.length) tail = 0;
		size--;
		if(size == a.length/4) resize(a.length/2);
		return item;
	}

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		ResizingArrayDeque<Integer> dqueue = new ResizingArrayDeque<Integer>();
		dqueue.pushLeft(1);
		dqueue.pushLeft(2);
		dqueue.pushLeft(3);
		
		StdOut.println(dqueue.popLeft());
		StdOut.println(dqueue.popLeft());
		StdOut.println(dqueue.popLeft());

		dqueue.pushRight(1);
		dqueue.pushRight(2);
		dqueue.pushRight(3);
		StdOut.println(dqueue.popLeft());
		StdOut.println(dqueue.popLeft());
		StdOut.println(dqueue.popLeft());
		
	}

}
1.3.34

</pre><p></p><p></p><pre name="code" class="java">import java.util.Iterator;

public class RandomBag<Item> implements Iterable<Item> 
{
	private Item[] a = (Item[]) new Object[1];
	int size;
	
	public boolean isEmpty()
	{
		return size == 0;
	}
	
	public int size()
	{
		return size;
	}
	private void resize(int cap)
	{
		Item[] tmp = (Item[]) new Object[cap];
		for(int i = 0;i<size;i++)
			tmp[i] = a[i];
		a=tmp;
	}
	
	public void add(Item item)
	{
		if(size == a.length) resize(2*size);
		a[size++] = item;
	}
	
	public Iterator<Item> iterator()
	{
		return new RandomIterator();
	}
	
	private int[] randomInt(int N)
	{
		int[] tmp = new int[N];

		for(int i =0;i<N;i++)
			tmp[i] = i;
		for(int i = N ;i>0;i--)
		{
			int index = StdRandom.uniform(i);

			int temp = tmp[index];
			tmp[index] = tmp[i-1];
			tmp[i-1] = temp;
		}

		return tmp;
	}
	
	private class RandomIterator implements Iterator<Item>
	{
		int[] randomArray = randomInt(size);
		int N = size;
		public boolean hasNext()
		{
			return size>0;
		}
		public void remove(){}
		public Item next()
		{
			return a[randomArray[--size]];
		}
	}
	
	
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		RandomBag<Integer> rdmBag = new RandomBag<Integer>();
		rdmBag.add(1);
		rdmBag.add(2);
		rdmBag.add(3);
		rdmBag.add(4);
		for(int i : rdmBag)
			StdOut.println(i);
	}

}
1.3.35
public class RandomQueue<Item>
{
	private Item[] a = (Item[]) new Object[1];
	private int N;
	
	public boolean isEmpty()
	{
		return N == 0;
	}
	public int size()
	{
		return N;
	}
	private void resize(int cap)
	{
		Item[] tmp = (Item[]) new Object[cap];
		for(int i = 0; i<N; i++)
			tmp[i] = a[i];
		a = tmp;
		//StdOut.print(" "+cap+" ");
	}
	public void enqueue(Item item)
	{
		if(N == a.length) resize(2*a.length);
		a[N++] = item;
		
	}
	
	public Item dequeue()
	{
		int index = StdRandom.uniform(N);
		Item indexTmp = a[index];
		a[index] = a[N-1];
		a[N-1] = indexTmp;
		Item tmp = a[--N];
		a[N] = null;
		if( N == a.length/4) resize(a.length/2);
			
		return tmp;
	}
	
	public Item sample()
	{
		int index = StdRandom.uniform(N);
		return a[index];
	}
	
	public Iterator<Item> iterator()
	{
		return new ReverseIterator();
	}
	
	private class ReverseIterator implements Iterator<Item>
	{
		private int i = N;
		public boolean hasNext()
		{
			return N>0;
		}
		public void remove(){}
		public Item next()
		{
			return a[--i];
		}
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		RandomQueue<Integer> queue = new RandomQueue<Integer>();
		queue.enqueue(1);
		queue.enqueue(2);
		queue.enqueue(3);
		StdOut.println(queue.sample());
		StdOut.println(queue.sample());
		StdOut.println(queue.sample());
	}

}

1.3.36

import java.util.Iterator;


public class RandomQueue<Item> implements Iterable<Item>
{
	private Item[] a = (Item[]) new Object[1];
	private int N;
	
	public boolean isEmpty()
	{
		return N == 0;
	}
	public int size()
	{
		return N;
	}
	private void resize(int cap)
	{
		Item[] tmp = (Item[]) new Object[cap];
		for(int i = 0; i<N; i++)
			tmp[i] = a[i];
		a = tmp;
		//StdOut.print(" "+cap+" ");
	}
	public void enqueue(Item item)
	{
		if(N == a.length) resize(2*a.length);
		a[N++] = item;
		
	}
	
	public Item dequeue()
	{
		int index = StdRandom.uniform(N);
		Item indexTmp = a[index];
		a[index] = a[N-1];
		a[N-1] = indexTmp;
		Item tmp = a[--N];
		a[N] = null;
		if( N == a.length/4) resize(a.length/2);
			
		return tmp;
	}
	
	public Item sample()
	{
		int index = StdRandom.uniform(N);
		return a[index];
	}
	
	public Iterator<Item> iterator()
	{
		return new RandomIterator();
	}
	
	private int[] randomInt(int N)
	{
		int[] tmp = new int[N];

		for(int i =0;i<N;i++)
			tmp[i] = i;
		for(int i = N ;i>0;i--)
		{
			int index = StdRandom.uniform(i);

			int temp = tmp[index];
			tmp[index] = tmp[i-1];
			tmp[i-1] = temp;
		}

		return tmp;
	}
	
	private class RandomIterator implements Iterator<Item>
	{
		int[] randomArray = randomInt(N);
		int size = N;
		public boolean hasNext()
		{
			return size>0;
		}
		public void remove(){}
		public Item next()
		{
			return a[randomArray[--size]];
		}
	}
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		RandomQueue<Integer> queue = new RandomQueue<Integer>();
		queue.enqueue(1);
		queue.enqueue(2);
		queue.enqueue(3);
		queue.enqueue(4);
		queue.enqueue(5);
		queue.enqueue(6);
		for(int i : queue)
			StdOut.println(i);
		
	}

}

1.3.37

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		ResizeArrayQueue<Integer> queue = new ResizeArrayQueue<Integer>();
		int N = StdIn.readInt();
		int M = StdIn.readInt();
		int[] tmp = new int[N];
		for(int i = 0;i<N;i++)
		{
			queue.enQueue(i);
		}
	
		for(int i = N;i>0;i--)
		{
			for(int j = 0;j<M-1;j++)
			{	
				int d = queue.deQueue();
				queue.enQueue(d);
			}
			StdOut.println(queue.deQueue());
				
		}

		
	}
1.3.38
public class GeneralizedQueue<Item>
{
	private Item[] a = (Item[]) new Object[1];
	private int size;
	
	public int size()
	{
		return size;
	}
	
	private void resize(int cap)
	{
		Item[] tmp = (Item[]) new Object[cap];
		for(int i = 0;i<size;i++)
			tmp[i] = a[i];
		a = tmp;
	}
	
	public void insert(Item item)
	{
		if(size == a.length) resize(2*size);
		a[size++] = item;
	}
	
	public Item delete(int k)
	{
		if(k>=size) 
		{
			StdOut.println("delete k error");
			return null;
		}
		Item ret = a[k-1];
		for(int j = k;j<size;j++)
			a[j-1] = a[j];
		a[size-1] = null;
		size--;
		if(size == a.length/4) resize(a.length/2);
		return ret;
	}
	
	public void printAll()
	{
		for(int i =0;i<size;i++)
			StdOut.println(a[i]);
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		GeneralizedQueue<Integer> queue = new GeneralizedQueue<Integer>();
		for(int i = 0;i<10;i++)
			queue.insert(i);
		queue.delete(1);
		queue.delete(3);
		queue.printAll();
	}

}
public class GeneralizedListQueue<Item>
{
	private class List
	{
		List next;
		Item item;
		
		List(Item data)
		{
			item = data;
			next = null;
		}
	}
	
	private List head = new List(null);
	private int size;
	
	public boolean isEmpty()
	{
		return size == 0;
	}
	
	public void insert(Item x)
	{
		List current = head;
		while(current.next != null)
			current = current.next;
		current.next = new List(x);
		size++;
	}
	
	public Item delete(int k)
	{
		if(k>size)
		{
			StdOut.println("k >= size");
			return null;
		}
		else
		{
			List current = head;
			while( --k > 0 ) current = current.next;
			Item item = current.next.item;
			current.next = current.next.next;
			size--;
			return item;
			
		}
	}
	
	public void printAll()
	{
		List current = head;
		while(current.next != null)
		{
			current = current.next;
			StdOut.println(current.item);
		}
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		GeneralizedListQueue<Integer> queue = new GeneralizedListQueue<Integer>();
		queue.insert(1);
		queue.insert(2);
		queue.insert(3);
		queue.delete(3);
		queue.printAll();
	}

}

1.3.39

public class RingBuffer<Item>
{
	private Item[] a;
	private int size;
	private int head = 0;
	private int tail = -1;
	
	public RingBuffer(int cap)
	{
		a = (Item[]) new Object[cap];
	}
	public boolean isEmpty()
	{
		return size == 0;
	}
	public int size()
	{
		return size;
	}
	
	public void enqueue(Item item)
	{
		++tail;
		if(tail == a.length) tail = 0;
		a[tail] = item;
		size++;
	}
	public Item dequeue()
	{
		Item item = a[head++];
		if(head == a.length) head = 0;
		size--;
		return item;
	}
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		RingBuffer<Integer> queue = new RingBuffer<Integer>(10);
		for(int i = 0;i<10;i++)
			queue.enqueue(i);
		for(int i = 0;i<10;i++)
			StdOut.println(queue.dequeue());
	}

}

1.3.40

public class GeneralizedListQueue<Item>
{
	private class List
	{
		List next;
		Item item;
		
		List(Item data)
		{
			item = data;
			next = null;
		}
	}
	
	private List head = new List(null);
	private int size;
	
	public boolean isEmpty()
	{
		return size == 0;
	}
	
	public void insert(Item x)
	{
		List tmp = head.next;
		head.next = new List(x);
		head.next.next = tmp;
		size++;
	}
	
	public boolean delete(Item x)
	{
			//StdOut.println(x);
			List current = head;
			while( current.next != null && !current.next.item.equals(x) ) current = current.next;
			if(current.next != null)
			{
				current.next = current.next.next;
				size--;
				return true;
			}
			return false;
	}
	
	public void printAll()
	{
		List current = head;
		while(current.next != null)
		{
			current = current.next;
			StdOut.println(current.item);
		}
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		GeneralizedListQueue<String> queue = new GeneralizedListQueue<String>();
		String[] input;
		input = StdIn.readAllStrings();
	
		for(int i = 0;i<input.length;i++)
		{
			
			queue.delete(input[i]);
			queue.insert(input[i]);
		}

	
		queue.printAll();
	}

}
1.3.41

<strong>	</strong>public RingBuffer(RingBuffer old)
	{
		a = (Item[]) new Object[old.size()];
		int N = old.size;
		for(int i = 0;i<N; i++)
		{
			Item tmp =(Item)old.dequeue();
			enqueue(tmp);
			old.enqueue(tmp);
		}
	}

1.3.42

<strong>	</strong>public Stack(Stack old)
	{
		Stack tmp = new Stack();
		for(int i = 0;i<old.size();i++)
			tmp.push(old.pop());
		for(int i = 0;i<old.size();i++)
		{
			Item x =(Item) tmp.pop();
			old.push(x);
			push(x);
		}
	}
1.3.43
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

public class FileList
{
	 public static void getAllFileName(String path,ResizeArrayQueue<String> fileName,int index)
	    {
	        File file = new File(path);
	        File [] files = file.listFiles();
	        String [] names = file.list();
	        if(names != null)
	        {
	        	int num = index;
	        	String s="";
	        	while(num-->0) 	s+="   ";
	        		
	        	for(int i = 0;i<names.length;i++)
	        		fileName.enQueue(s+names[i]);
	        	
	        }
	        index++;
	        for(File a:files)
	        {
	            if(a.isDirectory())
	            {
	            	
	                getAllFileName(a.getAbsolutePath(),fileName,index);
	            }
	        }
	    }
	    
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		ResizeArrayQueue<String> filename = new ResizeArrayQueue<String>();
		getAllFileName("G:\\测试",filename,0);
		int N = filename.size();
		for(int i = 0;i<N;i++)
			System.out.println(filename.deQueue());
		
	}

}

1.3.44

public class Buffer
{
	private int cur;
	private int size;
	private ResizeArrayStack<Character> stack;
	
	public Buffer()
	{
		stack = new ResizeArrayStack<Character>();
	}
	public void left(int k)
	{
		if(cur-k>=0) cur -= k;
	}
	public void right(int k)
	{
		if(cur+k<=size) cur+=k;
	}
	public int size()
	{
		return size;
	}
	public void insert(char c)
	{
		ResizeArrayStack<Character> tmp = new ResizeArrayStack<Character>();
		for(int i =0;i<size - cur;i++)
			tmp.push(stack.pop());
		stack.push(c);
		for(int i =0;i<size - cur;i++)
			stack.push(tmp.pop());
		size++;
	}
	public void delete()
	{
		ResizeArrayStack<Character> tmp = new ResizeArrayStack<Character>();
		for(int i =0;i<size - cur;i++)
			tmp.push(stack.pop());
		tmp.pop();
		for(int i =0;i<size - cur-1;i++)
			stack.push(tmp.pop());
		size--;
		if(cur>size) cur=size;
	}
	
	public void printAll()
	{
		for(char c:stack)
			StdOut.println(c);
			
	}
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Buffer buf = new Buffer();
		buf.insert('a');
		buf.insert('b');
		buf.insert('c');
		buf.insert('d');
		buf.right(2);
		buf.insert('f');
		buf.printAll();
	}

}
1.3.45


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值