算法(第四版)——栈

定义

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 

代码实现

链表实现

	public class Stack<Item> {
		private Node first; // 栈顶(最近添加的元素)
		private int N;      // 元素数量
		
		
		
		/**
		* 返回栈是否为空
		* @return true 栈为空, false 栈不为空。
		*/
		public boolean isEmpty() {
			return N == 0;
		}
		
		/**
		* 返回栈内元素数目
		* @return 栈内元素数目
		*/
		public int size() {
			return N;
		}
		
		/*
		* 添加元素到栈
		* @param item 添加的元素
		*/
		public void push (Item item) {
			Node oldNode = first;
			first = new Node();
			first.data = item;
			first.next = oldNode;
			N++;
		}
		
		/*
		* 从栈顶移除元素
		* return 移除的元素
		*/
		public Item pop() {
			Item item = first.data;
			first = first.next;
			N--;
			return item;
		}
		
		// 定义了节点的内部类
		private class Node {
			Item data;
			Node next;
		}
		
		public static void main(String[] args) {
			Stack<String> s = new Stack()<String>;
			System.out.println(s.isEmpty());
			s.push("hhhhh");
			System.out.println(s.first.data);
		}
		
	}

数组实现 

	public class Stack<Item> {
		private item[] a = (Item[]) new Object[1];  // 存储栈内元素
		private int N;  // 栈内元素数目
		
		/*
		* 返回栈是否为空
		* @return true 栈为空,false 栈不为空。
		*/
		public boolean isEmpty() {
			return N == 0;
		}
		
		/**
		* 返回栈内元素数目
		* @return 栈内元素数目
		*/
		public int size() {
			return N;
		}
		
		/*
		* 添加元素到栈
		* @param item 添加的元素
		*/
		public void push (Item item) {
			if (N == a.length) {
				resize(2 * a.length);
			}
			a[++N] = item;
		}
		
		/*
		* 从栈顶移除元素
		* return 移除的元素
		*/
		public Item pop() {
			Item item = a[--N];
			a[N] == null;
			if (N > 0 && N == a.length / 4) {
				resize(a.length / 2);				
			}
			return item;
		}
		
		/**
		* 重置数组大小
		* @param max 重置的数组大小
		*/
		public void resize(int max) {
			// 将栈移动到一个新数组
			Item[] temp = (Item[]) new Object[max];
			for (int i = 0; i < N; i++) {
				temp[i] = a[i];
				a = temp;
			}
		}
		
		public static void main(String[] args) {
			Stack<String> s = new Stack()<String>;
			System.out.println(s.isEmpty());
			s.push("hhhhh");
			System.out.println(s.a[0]);
		}
		
	}

猜你喜欢

转载自blog.csdn.net/qq_41722272/article/details/82763199