zoukankan      html  css  js  c++  java
  • 队列的应用——回文

      队列的应用很广泛。如操作系统中各种数据缓冲区的先进先出管理,应用系统中各种服务请求的排队管理等。

      以下例子是用一个队列和堆栈实现判断一个字符序列是否是回文。

      【例子】编写判断一个字符序列是否是回文的函数。回文是指一个字符序列以中间字符为基准两边字符完全相同,如字符序列"ABCDEDCBA"就是回文,而字符序列"ABCDEDBAC"就不是回文。设计一个主函数进行测试。

      【算法思想】设字符数组str中存放了要判断的字符串。把字符数组中的字符逐个分别存入一个队列和一个堆栈,然后逐个出队列和退栈并比较出队列的字符是否相等,若全部相等则该字符序列是回文,否则反之。

      【源代码】

    Queue.java

     1 package seqqueue;
     2 
     3 public interface Queue {
     4     //把元素obj插入队尾
     5     public void append(Object obj)throws Exception;
     6     //把对头数据元素删除并由函数返回
     7     public Object delete()throws Exception;
     8     //取对头数据元素并返回
     9     public Object getFront()throws Exception;
    10     //非空否。
    11     public boolean notEmpty();
    12 }

    SeqQueue.java

     1 package seqqueue;
     2 
     3     
     4 public class SeqQueue implements Queue{
     5     static final int defaultSize = 10;
     6     int front;
     7     int rear;
     8     int count;
     9     int maxSize;
    10     Object[] data;
    11     
    12     public SeqQueue(){
    13         initiate(defaultSize);
    14     }
    15     
    16     public SeqQueue(int sz){
    17         initiate(sz);
    18     }
    19     private void initiate(int sz) {
    20         // TODO Auto-generated method stub
    21         maxSize = sz;
    22         front=rear = 0;
    23         count = 0;
    24         data = new Object[sz];    
    25     }
    26 
    27     @Override
    28     public void append(Object obj) throws Exception {
    29         // TODO Auto-generated method stub
    30         if(count > 0 && front == rear)
    31             throw new Exception("队列已满!");
    32         data[rear]=obj;
    33         rear=(rear+1)%maxSize;
    34         count++;
    35     }
    36 
    37     @Override
    38     public Object delete() throws Exception {
    39         // TODO Auto-generated method stub
    40         if(count == 0)
    41             throw new Exception("队列已空!");
    42         Object temp = data[front];
    43         front=(front+1)%maxSize;
    44         count--;
    45         return temp;
    46     }
    47 
    48     @Override
    49     public Object getFront() throws Exception {
    50         // TODO Auto-generated method stub
    51         if(count == 0)
    52             throw new Exception("队列已空!");
    53         return data[front];
    54     }
    55 
    56     @Override
    57     public boolean notEmpty() {
    58         // TODO Auto-generated method stub
    59         return count !=0 ;
    60     }
    61 
    62 }

    SeqQueueTest.java

     1 package seqqueue;
     2 
     3 import seqstack.SeqStack;
     4 
     5 public class SeqQueueTest {
     6     public static void huiWei(String str) throws Exception{
     7         int n=str.length();
     8         SeqStack myStack=new SeqStack(n);
     9         SeqQueue myQueue=new SeqQueue(n);
    10         
    11         for(int i = 0 ; i < n; i++)
    12         {
    13             myQueue.append(str.substring(i, i+1));
    14             myStack.push(str.substring(i, i+1));
    15         }
    16         
    17         while(myQueue.notEmpty() && myStack.notEmpty())
    18         {
    19             if(!myQueue.delete().equals(myStack.pop()))
    20             {
    21                 System.out.println(str+"不是回文!");
    22                 return;
    23             }
    24         }
    25         System.out.println(str+"是回文!");
    26     }
    27     
    28     public static void main(String args[])
    29     {
    30         String str1="ABCDEDCBA";
    31         String str2="ABCDEDBAC";
    32         String str3="ABCDDCBA";
    33         try
    34         {
    35             huiWei(str1);
    36             huiWei(str2);
    37             huiWei(str3);
    38         }catch(Exception e)
    39         {
    40             System.out.println(e);
    41             
    42         }
    43         
    44     }
    45 
    46 }

      【运行截图】

  • 相关阅读:
    jquery获取input的checked属性
    归并排序法
    Pascal's Triangle II —LeetCode
    01背包之求第K优解——Bone Collector II
    Intellij IDEA 14隐藏被排除的文件夹
    LeetCode——Majority Element
    多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区
    LeetCode——Restore IP Addresses
    LeetCode——Pascal's Triangle
    LeetCode——Permutations
  • 原文地址:https://www.cnblogs.com/liao-pxsoftware15/p/8681486.html
Copyright © 2011-2022 走看看