JAva実装スタックとキューおよびスタックとキューの違い


スタックとキューは何ですか?コンセプトです!論理構造です!本当に存在しない!キャリアが固定されていません!スタックとキューのフィーチャー?スタック:先進後出、キュー:先進先出int、double......データ型array、list、mapにはそれぞれ固定されたフォーマットとスタイルがあり、スタックとキューは線形テーブルであり、配列であってもよい......「先進後出」構造に合致すればスタックと理解でき、「先進先出」構造に合致すればキューと理解できる
Javaで書かれたスタックとキューのコードの例を示します.
1、データノードを定義し、クラス名はNodeClassで、データ型不定は汎用Tで代替し、内部はデータを格納する私有変数Dataを定義し、そのデータ型不定も汎用Tで代替する.次のノードを指すポインタnext.
package Stack;

public class NodeClass {
    private T data;
    private NodeClass next;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public NodeClass getNext() {
        return next;
    }

    public void setNext(NodeClass next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "NodeClass{" +
                "data=" + data +
                ", next=" + next +
                '}';
    }
}

2、ノードのデータフィールドに記入する学生クラスを定義し、学生クラスには学生の学号、名前、その他の情報(異なる学生を区別するために比較的勝手に使用できる情報)が含まれている.
package Stack;


public class Student {
    private int stuNum;
    private String name;
    private String otherInfo;

    public int getStuNum() {
        return stuNum;
    }

    public void setStuNum(int stuNum) {
        this.stuNum = stuNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOtherInfo() {
        return otherInfo;
    }

    public void setOtherInfo(String otherInfo) {
        this.otherInfo = otherInfo;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuNum=" + stuNum +
                ", name='" + name + '\'' +
                ", otherInfo='" + otherInfo + '\'' +
                '}';
    }
}

3->1、スタック構造クラスを定義し、スタックトップポインタを定義し、スタックアウトスタックに入る方法
package que;

import Stack.NodeClass;

public class StackClass {

    private NodeClass que; //       ,    

    public NodeClass getQue() {
        return que;
    }

    public void setQue(NodeClass que) {
        this.que = que;
    }
        //     , NodeClass            
    public void add( NodeClass  add ){
        if( que == null ){//      que   ,         que    
            que = add;
        }else{
            add.setNext(que);//              
            que = add;// que        
        }
    }

    public NodeClass pop(){
        NodeClass result = que;//                  
        if( que != null ){
            que = que.getNext();// que         
        }
        return result;//      ,       
    }

    public void look(){
        System.out.println(que.toString());
    }
}

3->2、キューの構造クラスを定義し、ヘッダポインタとテールポインタがあり、テールポインタからキューに入る方法と先頭ポインタからキューを出る方法を定義する
package que;

import Stack.NodeClass;

public class QueClass {

    private NodeClass  que; //      
    private NodeClass  end; //         

    public NodeClass getQue() {
        return que;
    }

    public void setQue(NodeClass que) {
        this.que = que;
    }

    public NodeClass getEnd() {
        return end;
    }

    public void setEnd(NodeClass end) {
        this.end = end;
    }

    //    ,     
    public void add( NodeClass  add ){
            if( que == null ){//       , que           ,          ,  ,         
                que = add;
                end = que;
            }else{//       ,     next        add,
                end.setNext(add);
                end = end.getNext();// end      ,             
            }
    }

    //    ,     
    public NodeClass pop(){
        NodeClass result = que;//    NodeClass                 
        if( que != null ){//    ,    que       ,     que      ,   que     
            que = que.getNext();
        }
        return result;//         
    }

    public void look(){
        System.out.println(que.toString());
    }
}

**
4、テストクラス、スタックのテストクラスを創立して、それに対して入スタックと出スタックの操作を行う
**
package Stack;

import que.StackClass;


public class TestClass {
    public static void main(String[] a){
        String[] studentNames = new String[]{
                "  1","  2","  3","  4","  5","  6","  7","  8",
                "  9","  10"
        };

        StackClass que = new StackClass();//       

        //                  ,           
          for( int i = 0; i < studentNames.length; i++ ){
              NodeClass flag = new NodeClass();//        。      
              Student stu = new Student();//        ,       
              stu.setName( studentNames[i] );
              stu.setStuNum(i);
              stu.setOtherInfo("         " + ( i + 1 ) + "  ");

              flag.setData(stu);//                         

              que.add(flag);//qeu     ,           
              if( i == 3 || i == 6 || i == 9 ){//      “    ”   ,  3,6,9          
                    NodeClass as = que.pop();
                    if( as == null ){//           ,     “ ”
                        System.out.println("  ");
                        break;
                    }else{
                        System.out.println(as.getData().getName());
                    }
              }
          }

          for(;;){//    ,     
                NodeClass as = que.pop();
                if( as == null ){
                    System.out.println("  ");
                    break;
                }else{
                    System.out.println(as.getData().getName());
                }
          }

    }
}

5、テストクラス実装キュー
package Stack;

import que.QueClass;

/**
 * Created by Administrator on 2019/9/21.
 */
public class TestClass2 {
    public static void main(String[] args) {
        //          
        QueClass que=new QueClass();

//        QueClass end=new QueClass();//   

        String[] name=new String[]{
          "qinshuaihang","zhongjainjun","liyuhang","daishubo ","zhaohengfei","yangjianxing","jinxu","liweichen"
        };

        //  
        for (int i=0;i flag=new NodeClass<>();
            Student stu=new Student();
            stu.setName(name[i]);
            stu.setStuNum(i+1);
            stu.setOtherInfo("   "+(i+1)+"    ");
            //        

            flag.setData(stu);
            que.add(flag);//       
        }

        //  
        while (true){
            if (que.getQue()==null){
               break;
            }else{
                NodeClass result = que.pop();
//                System.out.println(result.getData().getName());
                System.out.println("  "+ result.getData().toString());
            }
        }



    }
}

6、補充
a.判断スタックが空であるか否かは、局構造を定義する際にヘッダポインタに初期値-1を与えることで判断キューが空であるか否かを判断し、ヘッダポインタとテールポインタが等しいか否かで判断することができる