Java資料結構(棧,隊列,雙鏈表)

來源:互聯網
上載者:User


(1)棧 
package ChapterOne;    public class Stack {      //棧數組      long stackArr[];      //棧的大小      int maxSize;      //棧的頂部      int top;      //初始化一個大小為size的棧      public Stack(int size){          maxSize = size;           stackArr = new long[size];          top = -1;      }      //出棧操作      public long pop(){          return stackArr[top--];      }      //進棧操作      public void push(long value){          stackArr[++top] = value;      }      //判斷棧是否為空白      public boolean isEmpty(){          return top == -1;      }      //判斷棧是否已滿      public boolean isFull(){          return top == maxSize-1;      }      //取棧頂元素      public long peek(){          return stackArr[top];      }      public static void main(String[] args) {          Stack stack = new Stack(10);          while(!stack.isFull()){              long v = (long) (Math.random()*100);              stack.push(v);              System.out.print(v+" ");          }          System.out.println();          while(!stack.isEmpty()){              long topValue = stack.pop();              System.out.print(topValue+" ");          }          System.out.println();      }  } 

(2)隊列 

package ChapterOne;    public class Queue {      //隊列數組      private long queueArr[];      //隊列的前端下標      private int front;      //隊列的尾端下標      private int rear;      //隊列的大小      private int maxSize;      //隊列中元素的個數      private int nItems;      //初始化一個大小為size的隊列      public Queue(int size){          queueArr = new long[size];          maxSize = size;          front = 0;          rear = -1;          nItems = 0;      }      //插入操作      public void insert(long value){          //隊列已滿          if(rear == maxSize-1)              rear = -1;          queueArr[++rear] = value;          nItems++;      }      //刪除操作      public long remove(){          long temp = queueArr[front++];          if(front == maxSize)              front = 0;          nItems--;          return temp;      }      //返回隊列第一個元素      public long peakFront(){          return queueArr[front];      }      //判斷是否為空白      public boolean isEmpty(){          return nItems == 0;      }      //判斷是否已滿      public boolean isFull(){          return nItems == maxSize;      }      //返回隊列中元素的個數      public int size(){          return nItems;      }            public void print(){          for(int i = front;i < front+nItems;i++){              System.out.print(queueArr[i]+" ");          }          System.out.println();      }            public static void main(String[] args) {          Queue q = new Queue(10);          while(!q.isFull()){              long value = (long)(Math.random()*100);              q.insert(value);          }          q.print();          while(!q.isEmpty()){              q.remove();              q.print();          }          q.print();          System.out.println(q.isEmpty());      }  }  
(3)優先隊列
package ChapterOne;    public class PriorityQueue {        private int nItems;            private long pqArr[];            private int maxSize;            public PriorityQueue(int size){          maxSize = size;          pqArr = new long[size];          nItems = 0;      }            public void insert(long value){          int i;          if(nItems == 0)              pqArr[nItems++] = value;          else{              for(i = nItems-1;i >= 0;i--){                  if(value < pqArr[i]){                      pqArr[i+1] = pqArr[i];                  }                  else                      break;              }              pqArr[i+1] = value;              nItems++;          }      }            public long remove(){          return pqArr[--nItems];      }            public boolean isEmpty(){          return nItems == 0;      }            public boolean isFull(){          return nItems == maxSize;      }            public void print(){          for(int i = 0;i < nItems;i++)              System.out.print(pqArr[i]+" ");          System.out.println();      }            public static void main(String[] args) {          PriorityQueue pq = new PriorityQueue(10);          while(!pq.isFull()){              long value = (long)(Math.random()*100);              pq.insert(value);          }          pq.print();      }  }
(4)雙鏈表
class Chain{    Chain pre=null,next=null;    int id;    String name;}class List{    private Chain header=new Chain();        public Chain add(int id,String name){ //在鏈表尾添加節點        Chain current=new Chain(); //建立鏈表頭        Chain temp=header;            while(temp.next!=null) //迴圈至鏈表尾            temp=temp.next;        temp.next=current;        current.pre=temp;            current.id=id;        current.name=name;        return current;    }        public Chain remove(int id){ //刪除指定id的節點        Chain temp=header;        Chain current=null;        while(temp.next!=null){            temp=temp.next;            if(temp.id==id){                current=temp;                break;            }        }        if(current==null)            return null;                        current.pre.next=current.next;        if(current.next!=null)            current.next.pre=current.pre;        return current;    }        public Chain remove(String name){ //刪除指定name的節點        Chain temp=header;        Chain current=null;        while(temp.next!=null){            temp=temp.next;            if(temp.name==name){                current=temp;                break;            }        }        if(current==null)            return null;                current.pre.next=current.next;        if(current.next!=null)            current.next.pre=current.pre;        return current;    }        public Chain remove(){ //刪除最後一個節點        Chain temp=header;        while(temp.next.next!=null){            temp=temp.next;        }        temp.next=null;            return temp;    }        public void clear(){ //刪除所有節點        header.next=null;    }        public Chain insert(int id,String name,int pos){ //在指定位置插入節點        Chain temp=header;        Chain current=new Chain();        int i=0;                for(i=0;i<=pos;i++){            if(temp.next!=null){                temp=temp.next;            }            else{                return null;            }                }                current.id=id;        current.name=name;                if(temp.next!=null){            temp.next.pre=current;            current.next=temp.next;        }        temp.next=current;        current.pre=temp;        return current;        }        public void print_all(){        Chain temp=header;                System.out.println("--------------------------------------");        while(temp.next!=null){            temp=temp.next;            System.out.println("ID: "+temp.id);            System.out.println("Name: "+temp.name);        }        System.out.println("--------------------------------------");    }}public class ChainList{    public static void main(String[] args){        List a=new List();                a.add(1,"譚孟瀧1") ;        a.add(2,"譚孟瀧2");        a.add(3,"譚孟瀧3");        a.add(4,"譚孟瀧4");        a.insert(12,"大胖",2);                a.print_all();    }} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.