算法导论-栈和队列的简单实现
来源:互联网 发布:2016淘宝活动报名入口 编辑:程序博客网 时间:2024/06/13 03:40
栈:
接口:
public interface Stack<T> {
boolean isEmpty();
void clear();
T pop();
boolean push(T t);
int length();
// 查看站顶元素,不执行移除
T peek();
// 返回对象位置
int search(T t);
}
boolean isEmpty();
void clear();
T pop();
boolean push(T t);
int length();
// 查看站顶元素,不执行移除
T peek();
// 返回对象位置
int search(T t);
}
数组实现
public class SimpleStack<T> implements Stack<T>{
int size=0;
private T[] t = (T[])new Object[12];
@Override
public boolean isEmpty() {
return false;
}
@Override
public void clear() {
for (int i = 0; i < t.length; i++) {
t[i]=null;
}
size=0;
}
@Override
public int length() {
return size;
}
@Override
public T pop() {
if(size==0){
return null;
}else{
T tmp=t[size-1];
t[size-1]=null;
size--;
return tmp;
}
}
@Override
public boolean push(T o) {
if(size>=t.length){
resize();
}
t[size++]=o;
return true;
}
private void resize() {
T[] tmp = (T[]) new Object[t.length*2];
for (int i = 0; i < t.length; i++) {
tmp[i]=t[i];
t[i]=null;
}
t = tmp;
tmp= null;
}
@Override
public T peek() {
if(size==0){
return null;
}else{
return t[size-1];
}
}
@Override
public int search(Object o) {
for (int i = 0; i < t.length; i++) {
if(o.equals(t[i])){
return i;
}
}
return -1;
}
@Override
public String toString() {
StringBuffer s = new StringBuffer();
s.append("statck:[\n");
for (int i = size-1; i >= 0; i--) {
s.append(" "+t[i].toString());
}
s.append("\n]");
return s.toString();
}
}
int size=0;
private T[] t = (T[])new Object[12];
@Override
public boolean isEmpty() {
return false;
}
@Override
public void clear() {
for (int i = 0; i < t.length; i++) {
t[i]=null;
}
size=0;
}
@Override
public int length() {
return size;
}
@Override
public T pop() {
if(size==0){
return null;
}else{
T tmp=t[size-1];
t[size-1]=null;
size--;
return tmp;
}
}
@Override
public boolean push(T o) {
if(size>=t.length){
resize();
}
t[size++]=o;
return true;
}
private void resize() {
T[] tmp = (T[]) new Object[t.length*2];
for (int i = 0; i < t.length; i++) {
tmp[i]=t[i];
t[i]=null;
}
t = tmp;
tmp= null;
}
@Override
public T peek() {
if(size==0){
return null;
}else{
return t[size-1];
}
}
@Override
public int search(Object o) {
for (int i = 0; i < t.length; i++) {
if(o.equals(t[i])){
return i;
}
}
return -1;
}
@Override
public String toString() {
StringBuffer s = new StringBuffer();
s.append("statck:[\n");
for (int i = size-1; i >= 0; i--) {
s.append(" "+t[i].toString());
}
s.append("\n]");
return s.toString();
}
}
链表实现:
public class SimpleLinkedStack<T> implements Stack<T>{
public class Node<T>{
Node<T> pre;
T data;
}
int size;
Node<T> top;
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public void clear() {
top=null;
size=0;
}
@Override
public T pop() {
if(top != null){
Node<T> result = top;
top=top.pre;
size--;
return result.data;
}
return null;
}
@Override
public boolean push(T o) {
Node<T> node= new Node<T>();
node.data=o;
node.pre=top;
top=node;
size++;
return true;
}
@Override
public int length() {
return size;
}
@Override
public T peek() {
return top.data;
}
@Override
public int search(T t) {
int count=0;
Node node=top;
while(node.pre!=null){
count++;
if(t.equals(node.data)){
return size-count;
}
}
return -1;
}
@Override
public String toString() {
StringBuffer s = new StringBuffer();
s.append("statck:[\n");
for (Node node=top;node!=null;node=node.pre) {
s.append(" "+node.data.toString());
}
s.append("\n]");
return s.toString();
}
}
public class Node<T>{
Node<T> pre;
T data;
}
int size;
Node<T> top;
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public void clear() {
top=null;
size=0;
}
@Override
public T pop() {
if(top != null){
Node<T> result = top;
top=top.pre;
size--;
return result.data;
}
return null;
}
@Override
public boolean push(T o) {
Node<T> node= new Node<T>();
node.data=o;
node.pre=top;
top=node;
size++;
return true;
}
@Override
public int length() {
return size;
}
@Override
public T peek() {
return top.data;
}
@Override
public int search(T t) {
int count=0;
Node node=top;
while(node.pre!=null){
count++;
if(t.equals(node.data)){
return size-count;
}
}
return -1;
}
@Override
public String toString() {
StringBuffer s = new StringBuffer();
s.append("statck:[\n");
for (Node node=top;node!=null;node=node.pre) {
s.append(" "+node.data.toString());
}
s.append("\n]");
return s.toString();
}
}
测试:
public class SimpleStatckTest {
public static void main(String[] args) {
Stack<String> s= new SimpleLinkedStack<String>();
s.push("a");
s.push("b");
s.push("c");
s.push("d");
System.out.println(s.toString());
s.peek();
s.peek();
System.out.println(s.toString());
s.pop();
s.pop();
System.out.println(s.toString());
}
}
public static void main(String[] args) {
Stack<String> s= new SimpleLinkedStack<String>();
s.push("a");
s.push("b");
s.push("c");
s.push("d");
System.out.println(s.toString());
s.peek();
s.peek();
System.out.println(s.toString());
s.pop();
s.pop();
System.out.println(s.toString());
}
}
队列:
接口:
public interface Queue<E> {
// enqueue
boolean add(E e);
// dequeue
E remove();
E element();
int length();
boolean empty();
void clear();
}
// enqueue
boolean add(E e);
// dequeue
E remove();
E element();
int length();
boolean empty();
void clear();
}
数组:
public class SimpleQueue<T> implements Queue<T>{
int size;
T[] t = (T[])new Object[12];
int front=0;
int back=0;
@Override
public boolean add(T e) {
if(back>t.length-1){
new Exception("队列已满");
}
t[back++]=e;
return true;
}
@Override
public T remove() {
if(empty()){
new Exception("队列已空");
}
T result=t[front];
t[front++]=null;
return result;
}
@Override
public T element() {
if(empty()){
return null;
}
return t[front];
}
@Override
public int length() {
return back-front;
}
@Override
public boolean empty() {
return back==front;
}
@Override
public void clear() {
for (int i = 0; i < t.length; i++) {
t[i]=null;
}
front=0;
back=0;
}
@Override
public String toString() {
if(empty()){
return "queue:[]";
}else{
StringBuffer s= new StringBuffer();
s.append("queue:[\n");
for (int i = front; i < back; i++) {
s.append(" "+t[i]);
}
s.append("\n]");
return s.toString();
}
}
}
int size;
T[] t = (T[])new Object[12];
int front=0;
int back=0;
@Override
public boolean add(T e) {
if(back>t.length-1){
new Exception("队列已满");
}
t[back++]=e;
return true;
}
@Override
public T remove() {
if(empty()){
new Exception("队列已空");
}
T result=t[front];
t[front++]=null;
return result;
}
@Override
public T element() {
if(empty()){
return null;
}
return t[front];
}
@Override
public int length() {
return back-front;
}
@Override
public boolean empty() {
return back==front;
}
@Override
public void clear() {
for (int i = 0; i < t.length; i++) {
t[i]=null;
}
front=0;
back=0;
}
@Override
public String toString() {
if(empty()){
return "queue:[]";
}else{
StringBuffer s= new StringBuffer();
s.append("queue:[\n");
for (int i = front; i < back; i++) {
s.append(" "+t[i]);
}
s.append("\n]");
return s.toString();
}
}
}
链表:
public class SimpleLinkedQueue<T> implements Queue<T> {
public class Node<T> {
T data;
Node<T> next;
}
Node<T> front;
Node<T> back;
int size;
@Override
public boolean add(T e) {
if(front==null){
front = new Node<T>();
front.data=e;
back=front;
}else{
Node<T> node = new Node<T>();
node.data=e;
back.next=node;
back=node;
}
size++;
return true;
}
@Override
public T remove() {
if(empty()){
new Exception("队列已空");
}
T result = front.data;
front = front.next;
size--;
return result;
}
@Override
public T element() {
if (empty()) {
return null;
}
return back.data;
}
@Override
public int length() {
return size;
}
@Override
public boolean empty() {
return size == 0;
}
@Override
public void clear() {
front = null;
back = null;
size = 0;
}
@Override
public String toString() {
if(empty()){
return "queue:[]";
}else{
StringBuffer s= new StringBuffer();
s.append("queue:[\n");
for (Node node = front; node != null; node=node.next) {
s.append(" "+node.data);
}
s.append("\n]");
return s.toString();
}
}
}
public class Node<T> {
T data;
Node<T> next;
}
Node<T> front;
Node<T> back;
int size;
@Override
public boolean add(T e) {
if(front==null){
front = new Node<T>();
front.data=e;
back=front;
}else{
Node<T> node = new Node<T>();
node.data=e;
back.next=node;
back=node;
}
size++;
return true;
}
@Override
public T remove() {
if(empty()){
new Exception("队列已空");
}
T result = front.data;
front = front.next;
size--;
return result;
}
@Override
public T element() {
if (empty()) {
return null;
}
return back.data;
}
@Override
public int length() {
return size;
}
@Override
public boolean empty() {
return size == 0;
}
@Override
public void clear() {
front = null;
back = null;
size = 0;
}
@Override
public String toString() {
if(empty()){
return "queue:[]";
}else{
StringBuffer s= new StringBuffer();
s.append("queue:[\n");
for (Node node = front; node != null; node=node.next) {
s.append(" "+node.data);
}
s.append("\n]");
return s.toString();
}
}
}
测试:
public class SimpleQueueTest {
public static void main(String[] args) {
Queue<String> queue=new SimpleLinkedQueue<String>();
queue.add("a");
queue.add("b");
queue.add("c");
System.out.println(queue.toString());
queue.add("d");
System.out.println(queue.toString());
queue.remove();
System.out.println(queue.toString());
queue.element();
System.out.println(queue.toString());
}
}
public static void main(String[] args) {
Queue<String> queue=new SimpleLinkedQueue<String>();
queue.add("a");
queue.add("b");
queue.add("c");
System.out.println(queue.toString());
queue.add("d");
System.out.println(queue.toString());
queue.remove();
System.out.println(queue.toString());
queue.element();
System.out.println(queue.toString());
}
}
0 0
- 算法导论-栈和队列的简单实现
- 算法导论-------------队列(queue)的简单实现
- 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
- 栈和队列的数组实现—《算法导论》学习笔记之六
- 算法导论第十章--队列的实现
- 两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】
- 算法导论 使用两个栈实现队列
- [算法导论]第十章《栈和队列》
- 算法导论—栈和队列
- 算法导论--优先队列实现
- 算法导论优先队列实现
- 算法导论------------栈(stack)简单的数组实现
- 【算法导论】简单哈希表的除法实现
- 算法导论&堆排序&堆实现的优先队列
- 《算法导论》学习笔记之Chapter10---队列的数组实现
- 栈和队列:栈的简单实现
- 简单的栈和队列经典实现
- java实现简单的队列和栈
- hdu-1846 Brave Game
- C语言循环结构总结笔记
- 百度眼中的原创
- 天天用的开发环境,你真的了解吗?
- VB.Net 三层登录实例
- 算法导论-栈和队列的简单实现
- DBGrid上设置选择项
- 九度 题目1443:Tr A
- apache kafka系列之Controller设计机制和状态变化
- 内存拷贝函数编写
- jsp在线投票系统实验
- 黑马程序员-----------java 十进制转换成其他任意进制
- ssh 无密码验证 及 ssh localhost 仍然需要密码的解决方案
- jquery cookie(备忘)