stack-all

本文介绍了Java编程中的队列和栈接口IQueue和IStack的实现,包括使用LinkNode构建的LinkStack和基于数组的SeqQueue,展示了如何进行元素的入队、出队、入栈、出栈等操作。
摘要由CSDN通过智能技术生成
package ch03;

public interface IQueue<E> {
       boolean enqueue(E item);//入队
       E dequeue(); //出队
       E peek(); //取队头元素
       int size(); //求队列的长度
       void clear();//清空队列
       boolean isEmpty(); //判断队列是否为空
}
package ch03;

public interface IStack<E> {
    boolean push(E e);//入栈
    E pop();//出栈
    E peek();//取栈顶元素
    int size();//获取栈中元素的个数
    boolean isEmpty();//是否为空
    void clear();//清空栈
}
package ch03;

public class LinkNode<E> {
   E data;
    LinkNode<E>  next;
    public LinkNode(E data) {
      this.data = data;
   }
   public LinkNode(E data, LinkNode<E> next) {
      this.data = data;
      this.next = next;
   }
}
package ch03;

public class LinkStack<E> implements IStack<E> {
    LinkNode<E> top;
    int size;
   public LinkStack() {
      this.top = null;
      size=0;
   }
   public boolean push(E e) {
      // TODO Auto-generated method stub
      /*创建一个新结点,为新结点分配内存并为数据字段分配值。
      如果栈不为空,将新结点的next指向栈顶指示器top所指向的结点。
      将栈顶指示器top指向新结点。
      将栈元素个数size加1,返回新添加的数据元素。*/

      LinkNode<E> newNode=new LinkNode<E>(e);
      if(!(top==null)) {
         newNode.next=top;
      }
      top=newNode;
      size++;
      return true;
   }


   public E pop() {

      /*如果栈不为空,获取栈顶指示器top所指向结点的值。
      将栈顶指示器top指向单链表中下一个结点。
      栈元素个数size减1。*/
      if(top==null)
         return null;
      E tmp=top.data;
      top=top.next;
      size--;
      return tmp;
   }

   @Override
   public E peek() {
      /*检查栈中是否含有元素,如果无,返回null
      获取索引top中的值元素*/
      if (top==null)
         return null;
      //E tmp=top.data;
      return top.data;
   }

   @Override
   public int size() {
      // TODO Auto-generated method stub
      return size;
   }

   @Override
   public boolean isEmpty() {
      
      return top==null;
   }

   @Override
   public void clear() {
      top=null;

   }




}
package ch03;

import java.lang.reflect.Array;

public class SeqQueue<E> implements IQueue<E> {
   E data[];
   int maxsize;
   int front,rear;
   int size;
   public SeqQueue(Class<E> type,int maxsize){
      data=(E[])Array.newInstance(type, maxsize);
      this.maxsize=maxsize;
      front=rear=-1;
      size=0;
      
   }
   public boolean enqueue(E item) {
      // TODO Auto-generated method stub
      if(rear==maxsize-1)
      return false;
      rear++;
      data[rear]=item;
      return true;
   }

   public E dequeue() {
      if(isEmpty()) return null;
      front++;
      return data[front];
   }

   public E peek() {
      if(isEmpty()) return null;
      return data[front];
   }
   public int size() {
      // TODO Auto-generated method stub
      return size;
   }

   public void clear() {
      rear=front=-1;

   }
   public boolean isEmpty() {
      // TODO Auto-generated method stub
      return rear==front;
   }

}
package ch03;

import java.lang.reflect.Array;

public class SeqStack<E> implements IStack<E> {
    E[] data;
    int maxsize;
    int top;
    public SeqStack(Class<E> type,int maxsize ) {
       data=(E[])Array.newInstance(type,maxsize);
       this.maxsize=maxsize;
       top=-1;    
    }
   public  boolean push(E e) {
      if(top==maxsize-1) {
         return false;
      }
      top++;
      data[top]=e;
      return true;
   }
   public E pop() {
      if(top == -1)
      return null;
      E e = data[top];
      top--;
      return e;
   }
   public E peek() {
      if(top == -1)
         return null;
      E e = data[top];
      return e;
   }

   
   public int size() {
      return top+1;
   }

   
   public boolean isEmpty() {
        return top==-1;
   }

   public void clear() {
      top=-1;

   }
}

package ch03;

public class TestQueue {
   public static void main(String[] args) {
      IQueue<Integer> queue=new SeqQueue<Integer>(Integer.class,5);
       for(int i=1;i<=5;i++)
          queue.enqueue(i*2);
       for(int i=1;i<=5;i++)
          System.out.print(queue.dequeue()+" ");
   }

}

package ch03;

public class TestSeqStack {

   public static void main(String[] args) {
      //IStack<Integer> stack=new SeqStack<Integer>(Integer.class,5);
      IStack<Integer> stack=new LinkStack<Integer>();
       for(int i=1;i<=5;i++)
          stack.push(i*2);
       for(int i=1;i<=5;i++)
          System.out.print(stack.pop()+" ");
   }

}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值