栈和队列

三.栈和队列

1.栈的定义:先进后出,在此使用的数组进行栈的实现;栈的时间复杂度是O(1);

2.在栈的构造过程中提供了入栈、出栈、查看、判空、判满方法:

public class StackX {
   private int maxSize;
   private long[] stackArray;
   private int top;
 
   public StackX(int max) {
      maxSize = max;
      stackArray = newlong[maxSize];
      top = -1;
   }
 
   /**
    * 入栈
    *
    * @param value
    */
   publicvoid push(long value) {
      stackArray[++top] = value;
   }
 
   /**
    * 出栈
    *
    * @return
    */
   publiclong pop() {
      returnstackArray[top--];
   }
 
   /**
    * 查看
    *
    * @return
    */
   publiclong peek() {
      returnstackArray[top];
   }
 
   /**
    * 判空
    *
    * @return
    */
   publicboolean isEmpty() {
      returntop == -1;
   }
 
   /**
    * 判满
    */
   publicboolean isFull() {
      returntop == maxSize - 1;
   }
 
}

3.从上面的代码中我们不难看出利用数组进行栈的构造是比较容易的;

4.栈的应用:比如进行单词的逆序,入栈然后进行出栈即可。再比如分隔符的匹配;

5.分隔符的匹配实现

编写的类:

public class BracketChecker {
 
   private String in;
 
   public BracketChecker(String input) {
      in = input;
   }
 
   publicvoid check() {
      int maxSize = in.length();
      CharStackX charStackX = new CharStackX(maxSize);
      for (int i = 0; i < maxSize; i++) {
         char ch = in.charAt(i);
         switch (ch) {
         case'{':
         case'[':
         case'(':
            charStackX.push(ch);
            break;
         case'}':
         case']':
         case')':
            if (!charStackX.isEmpty()) {
                char chx = charStackX.pop();
                System.out.println(chx);
                if ((ch == '}' && chx != '{') || (ch == ']' && chx != '[')
                      || (ch == ')' && chx != '('))
                   System.out.println("error" + ch + "at" + i);
            } else {
                System.out.println("error" + ch + "at" + i);
               
            }
            break;
         default:
            break;
         }
      }
      if(!charStackX.isEmpty()){
         System.out.println("error missing right delimiter");
      }
   }
}

6.队列的定义:先进先出。队列的插入和删除数据的时间复杂度为O(1)


7.入队完成时rear进行加一,出队完成时是front进行加一;

8.队列的简单实现:

public class Queue {
   private int max;
   private long[] array;
   private int front;
   private int rear;
   private int nItems;
 
   public Queue(int s) {
      max = s;
      array = newlong[max];
      front = 0;
      rear = -1;
      nItems = 0;
   }
 
   publicvoid insert(long value) {
      if (rear == max - 1) {
         rear = -1;
      }
      array[++rear] = value;
      nItems++;
   }
 
   publiclong remove() {
      long temp = array[front++];
      if (front == max) {
         front = 0;
      }
      nItems--;
      return temp;
   }
 
   publiclong peekFront() {
      returnarray[front];
 
   }
 
   publicboolean isEmpty() {
      return (nItems == 0);
   }
 
   publicboolean isFull() {
      return (nItems == max);
   }
 
   publicint size() {
      returnnItems;
   }
  
 
}

9.优先级队列的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值