• java 栈,队列,链表,双链表,树


    // stack.java
    // demonstrates stacks
    // to run this program: C>java StackApp
    ////////////////////////////////////////////////////////////////
    class StackX
       {
       private int maxSize;        // size of stack array
       private long[] stackArray;
       private int top;            // top of stack
    //--------------------------------------------------------------
       public StackX(int s)         // constructor
          {
          maxSize = s;             // set array size
          stackArray = new long[maxSize];  // create array
          top = -1;                // no items yet
          }
    //--------------------------------------------------------------
       public void push(long j)    // put item on top of stack
          {
          stackArray[++top] = j;     // increment top, insert item
          }
    //--------------------------------------------------------------
       public long pop()           // take item from top of stack
          {
          return stackArray[top--];  // access item, decrement top
          }
    //--------------------------------------------------------------
       public long peek()          // peek at top of stack
          {
          return stackArray[top];
          }
    //--------------------------------------------------------------
       public boolean isEmpty()    // true if stack is empty
          {
          return (top == -1);
          }
    //--------------------------------------------------------------
       public boolean isFull()     // true if stack is full
          {
          return (top == maxSize-1);
          }
    //--------------------------------------------------------------
       }  // end class StackX
    ////////////////////////////////////////////////////////////////
    class StackApp
       {
       public static void main(String[] args)
          {
          StackX theStack = new StackX(10);  // make new stack
          theStack.push(20);               // push items onto stack
          theStack.push(40);
          theStack.push(60);
          theStack.push(80);

          while( !theStack.isEmpty() )     // until it's empty,
             {                             // delete item from stack
             long value = theStack.pop();
             System.out.print(value);      // display it
             System.out.print(" ");
             }  // end while
          System.out.println("");
          }  // end main()
       }  // end class StackApp
    ////////////////////////////////////////////////////////////////
    // Queue.java
    // demonstrates queue
    // to run this program: C>java QueueApp
    ////////////////////////////////////////////////////////////////
    class Queue
       {
       private int maxSize;
       private long[] queArray;
       private int front;
       private int rear;
       private int nItems;
    //--------------------------------------------------------------
       public Queue(int s)          // constructor
          {
          maxSize = s;
          queArray = new long[maxSize];
          front = 0;
          rear = -1;
          nItems = 0;
          }
    //--------------------------------------------------------------
       public void insert(long j)   // put item at rear of queue
          {
          if(rear == maxSize-1)         // deal with wraparound
             rear = -1;
          queArray[++rear] = j;         // increment rear and insert
          nItems++;                     // one more item
          }
    //--------------------------------------------------------------
       public long remove()         // take item from front of queue
          {
          long temp = queArray[front++]; // get value and incr front
          if(front == maxSize)           // deal with wraparound
             front = 0;
          nItems--;                      // one less item
          return temp;
          }
    //--------------------------------------------------------------
       public long peekFront()      // peek at front of queue
          {
          return queArray[front];
          }
    //--------------------------------------------------------------
       public boolean isEmpty()    // true if queue is empty
          {
          return (nItems==0);
          }
    //--------------------------------------------------------------
       public boolean isFull()     // true if queue is full
          {
          return (nItems==maxSize);
          }
    //--------------------------------------------------------------
       public int size()           // number of items in queue
          {
          return nItems;
          }
    //--------------------------------------------------------------
       }  // end class Queue
    ////////////////////////////////////////////////////////////////
    class QueueApp
       {
       public static void main(String[] args)
          {
          Queue theQueue = new Queue(5);  // queue holds 5 items

          theQueue.insert(10);            // insert 4 items
          theQueue.insert(20);
          theQueue.insert(30);
          theQueue.insert(40);

          theQueue.remove();              // remove 3 items
          theQueue.remove();              //    (10, 20, 30)
          theQueue.remove();

          theQueue.insert(50);            // insert 4 more items
          theQueue.insert(60);            //    (wraps around)
          theQueue.insert(70);
          theQueue.insert(80);

          while( !theQueue.isEmpty() )    // remove and display
             {                            //    all items
             long n = theQueue.remove();  // (40, 50, 60, 70, 80)
             System.out.print(n);
             System.out.print(" ");
             }
          System.out.println("");
          }  // end main()
       }  // end class QueueApp
    ////////////////////////////////////////////////////////////////
    // linkList.java
    // demonstrates linked list
    // to run this program: C>java LinkListApp
    ////////////////////////////////////////////////////////////////
    class Link
       {
       public int iData;              // data item
       public double dData;           // data item
       public Link next;              // next link in list
    // -------------------------------------------------------------
       public Link(int id, double dd) // constructor
          {
          iData = id;                 // initialize data
          dData = dd;                 // ('next' is automatically
          }                           //  set to null)
    // -------------------------------------------------------------
       public void displayLink()      // display ourself
          {
          System.out.print("{" + iData + ", " + dData + "} ");
          }
       }  // end class Link
    ////////////////////////////////////////////////////////////////
    class LinkList
       {
       private Link first;            // ref to first link on list

    // -------------------------------------------------------------
       public LinkList()              // constructor
          {
          first = null;               // no links on list yet
          }
    // -------------------------------------------------------------
       public boolean isEmpty()       // true if list is empty
          {
          return (first==null);
          }
    // -------------------------------------------------------------
                                      // insert at start of list
       public void insertFirst(int id, double dd)
          {                           // make new link
          Link newLink = new Link(id, dd);
          newLink.next = first;       // newLink --> old first
          first = newLink;            // first --> newLink
          }
    // -------------------------------------------------------------
       public Link deleteFirst()      // delete first item
          {                           // (assumes list not empty)
          Link temp = first;          // save reference to link
          first = first.next;         // delete it: first-->old next
          return temp;                // return deleted link
          }
    // -------------------------------------------------------------
       public void displayList()
          {
          System.out.print("List (first-->last): ");
          Link current = first;       // start at beginning of list
          while(current != null)      // until end of list,
             {
             current.displayLink();   // print data
             current = current.next;  // move to next link
             }
          System.out.println("");
          }
    // -------------------------------------------------------------
       }  // end class LinkList
    ////////////////////////////////////////////////////////////////
    class LinkListApp
       {
       public static void main(String[] args)
          {
          LinkList theList = new LinkList();  // make new list

          theList.insertFirst(22, 2.99);      // insert four items
          theList.insertFirst(44, 4.99);
          theList.insertFirst(66, 6.99);
          theList.insertFirst(88, 8.99);

          theList.displayList();              // display list

          while( !theList.isEmpty() )         // until it's empty,
             {
             Link aLink = theList.deleteFirst();   // delete link
             System.out.print("Deleted ");         // display it
             aLink.displayLink();
             System.out.println("");
             }
          theList.displayList();              // display list
          }  // end main()
       }  // end class LinkListApp
    ////////////////////////////////////////////////////////////////
     // doublyLinked.java
    // demonstrates doubly-linked list
    // to run this program: C>java DoublyLinkedApp
    ////////////////////////////////////////////////////////////////
    class Link
       {
       public long dData;                 // data item
       public Link next;                  // next link in list
       public Link previous;              // previous link in list
    // -------------------------------------------------------------
       public Link(long d)                // constructor
          { dData = d; }
    // -------------------------------------------------------------
       public void displayLink()          // display this link
          { System.out.print(dData + " "); }
    // -------------------------------------------------------------
       }  // end class Link
    ////////////////////////////////////////////////////////////////
    class DoublyLinkedList
       {
       private Link first;               // ref to first item
       private Link last;                // ref to last item
    // -------------------------------------------------------------
       public DoublyLinkedList()         // constructor
          {
          first = null;                  // no items on list yet
          last = null;
          }
    // -------------------------------------------------------------
       public boolean isEmpty()          // true if no links
          { return first==null; }
    // -------------------------------------------------------------
       public void insertFirst(long dd)  // insert at front of list
          {
          Link newLink = new Link(dd);   // make new link

          if( isEmpty() )                // if empty list,
             last = newLink;             // newLink <-- last
          else
             first.previous = newLink;   // newLink <-- old first
          newLink.next = first;          // newLink --> old first
          first = newLink;               // first --> newLink
          }
    // -------------------------------------------------------------
       public void insertLast(long dd)   // insert at end of list
          {
          Link newLink = new Link(dd);   // make new link
          if( isEmpty() )                // if empty list,
             first = newLink;            // first --> newLink
          else
             {
             last.next = newLink;        // old last --> newLink
             newLink.previous = last;    // old last <-- newLink
             }
          last = newLink;                // newLink <-- last
          }
    // -------------------------------------------------------------
       public Link deleteFirst()         // delete first link
          {                              // (assumes non-empty list)
          Link temp = first;
          if(first.next == null)         // if only one item
             last = null;                // null <-- last
          else
             first.next.previous = null; // null <-- old next
          first = first.next;            // first --> old next
          return temp;
          }
    // -------------------------------------------------------------
       public Link deleteLast()          // delete last link
          {                              // (assumes non-empty list)
          Link temp = last;
          if(first.next == null)         // if only one item
             first = null;               // first --> null
          else
             last.previous.next = null;  // old previous --> null
          last = last.previous;          // old previous <-- last
          return temp;
          }
    // -------------------------------------------------------------
                                         // insert dd just after key
       public boolean insertAfter(long key, long dd)
          {                              // (assumes non-empty list)
          Link current = first;          // start at beginning
          while(current.dData != key)    // until match is found,
             {
             current = current.next;     // move to next link
             if(current == null)
                return false;            // didn't find it
             }
          Link newLink = new Link(dd);   // make new link

          if(current==last)              // if last link,
             {
             newLink.next = null;        // newLink --> null
             last = newLink;             // newLink <-- last
             }
          else                           // not last link,
             {
             newLink.next = current.next; // newLink --> old next
                                          // newLink <-- old next
             current.next.previous = newLink;
             }
          newLink.previous = current;    // old current <-- newLink
          current.next = newLink;        // old current --> newLink
          return true;                   // found it, did insertion
          }
    // -------------------------------------------------------------
       public Link deleteKey(long key)   // delete item w/ given key
          {                              // (assumes non-empty list)
          Link current = first;          // start at beginning
          while(current.dData != key)    // until match is found,
             {
             current = current.next;     // move to next link
             if(current == null)
                return null;             // didn't find it
             }
          if(current==first)             // found it; first item?
             first = current.next;       // first --> old next
          else                           // not first
                                         // old previous --> old next
             current.previous.next = current.next;

          if(current==last)              // last item?
             last = current.previous;    // old previous <-- last
          else                           // not last
                                         // old previous <-- old next
             current.next.previous = current.previous;
          return current;                // return value
          }
    // -------------------------------------------------------------
       public void displayForward()
          {
          System.out.print("List (first-->last): ");
          Link current = first;          // start at beginning
          while(current != null)         // until end of list,
             {
             current.displayLink();      // display data
             current = current.next;     // move to next link
             }
          System.out.println("");
          }
    // -------------------------------------------------------------
       public void displayBackward()
          {
          System.out.print("List (last-->first): ");
          Link current = last;           // start at end
          while(current != null)         // until start of list,
             {
             current.displayLink();      // display data
             current = current.previous; // move to previous link
             }
          System.out.println("");
          }
    // -------------------------------------------------------------
       }  // end class DoublyLinkedList
    ////////////////////////////////////////////////////////////////
    class DoublyLinkedApp
       {
       public static void main(String[] args)
          {                             // make a new list
          DoublyLinkedList theList = new DoublyLinkedList();

          theList.insertFirst(22);      // insert at front
          theList.insertFirst(44);
          theList.insertFirst(66);

          theList.insertLast(11);       // insert at rear
          theList.insertLast(33);
          theList.insertLast(55);

          theList.displayForward();     // display list forward
          theList.displayBackward();    // display list backward

          theList.deleteFirst();        // delete first item
          theList.deleteLast();         // delete last item
          theList.deleteKey(11);        // delete item with key 11

          theList.displayForward();     // display list forward

          theList.insertAfter(22, 77);  // insert 77 after 22
          theList.insertAfter(33, 88);  // insert 88 after 33

          theList.displayForward();     // display list forward
          }  // end main()
       }  // end class DoublyLinkedApp
    ////////////////////////////////////////////////////////////////
    // tree.java
    // demonstrates binary tree
    // to run this program: C>java TreeApp
    import java.io.*;
    import java.util.*;               // for Stack class
    ////////////////////////////////////////////////////////////////
    class Node
       {
       public int iData;              // data item (key)
       public double dData;           // data item
       public Node leftChild;         // this node's left child
       public Node rightChild;        // this node's right child

       public void displayNode()      // display ourself
          {
          System.out.print('{');
          System.out.print(iData);
          System.out.print(", ");
          System.out.print(dData);
          System.out.print("} ");
          }
       }  // end class Node
    ////////////////////////////////////////////////////////////////
    class Tree
       {
       private Node root;             // first node of tree

    // -------------------------------------------------------------
       public Tree()                  // constructor
          { root = null; }            // no nodes in tree yet
    // -------------------------------------------------------------
       public Node find(int key)      // find node with given key
          {                           // (assumes non-empty tree)
          Node current = root;               // start at root
          while(current.iData != key)        // while no match,
             {
             if(key < current.iData)         // go left?
                current = current.leftChild;
             else                            // or go right?
                current = current.rightChild;
             if(current == null)             // if no child,
                return null;                 // didn't find it
             }
          return current;                    // found it
          }  // end find()
    // -------------------------------------------------------------
       public void insert(int id, double dd)
          {
          Node newNode = new Node();    // make new node
          newNode.iData = id;           // insert data
          newNode.dData = dd;
          if(root==null)                // no node in root
             root = newNode;
          else                          // root occupied
             {
             Node current = root;       // start at root
             Node parent;
             while(true)                // (exits internally)
                {
                parent = current;
                if(id < current.iData)  // go left?
                   {
                   current = current.leftChild;
                   if(current == null)  // if end of the line,
                      {                 // insert on left
                      parent.leftChild = newNode;
                      return;
                      }
                   }  // end if go left
                else                    // or go right?
                   {
                   current = current.rightChild;
                   if(current == null)  // if end of the line
                      {                 // insert on right
                      parent.rightChild = newNode;
                      return;
                      }
                   }  // end else go right
                }  // end while
             }  // end else not root
          }  // end insert()
    // -------------------------------------------------------------
       public boolean delete(int key) // delete node with given key
          {                           // (assumes non-empty list)
          Node current = root;
          Node parent = root;
          boolean isLeftChild = true;

          while(current.iData != key)        // search for node
             {
             parent = current;
             if(key < current.iData)         // go left?
                {
                isLeftChild = true;
                current = current.leftChild;
                }
             else                            // or go right?
                {
                isLeftChild = false;
                current = current.rightChild;
                }
             if(current == null)             // end of the line,
                return false;                // didn't find it
             }  // end while
          // found node to delete

          // if no children, simply delete it
          if(current.leftChild==null &&
                                       current.rightChild==null)
             {
             if(current == root)             // if root,
                root = null;                 // tree is empty
             else if(isLeftChild)
                parent.leftChild = null;     // disconnect
             else                            // from parent
                parent.rightChild = null;
             }

          // if no right child, replace with left subtree
          else if(current.rightChild==null)
             if(current == root)
                root = current.leftChild;
             else if(isLeftChild)
                parent.leftChild = current.leftChild;
             else
                parent.rightChild = current.leftChild;

          // if no left child, replace with right subtree
          else if(current.leftChild==null)
             if(current == root)
                root = current.rightChild;
             else if(isLeftChild)
                parent.leftChild = current.rightChild;
             else
                parent.rightChild = current.rightChild;

          else  // two children, so replace with inorder successor
             {
             // get successor of node to delete (current)
             Node successor = getSuccessor(current);

             // connect parent of current to successor instead
             if(current == root)
                root = successor;
             else if(isLeftChild)
                parent.leftChild = successor;
             else
                parent.rightChild = successor;

             // connect successor to current's left child
             successor.leftChild = current.leftChild;
             }  // end else two children
          // (successor cannot have a left child)
          return true;                                // success
          }  // end delete()
    // -------------------------------------------------------------
       // returns node with next-highest value after delNode
       // goes to right child, then right child's left descendents
       private Node getSuccessor(Node delNode)
          {
          Node successorParent = delNode;
          Node successor = delNode;
          Node current = delNode.rightChild;   // go to right child
          while(current != null)               // until no more
             {                                 // left children,
             successorParent = successor;
             successor = current;
             current = current.leftChild;      // go to left child
             }
                                               // if successor not
          if(successor != delNode.rightChild)  // right child,
             {                                 // make connections
             successorParent.leftChild = successor.rightChild;
             successor.rightChild = delNode.rightChild;
             }
          return successor;
          }
    // -------------------------------------------------------------
       public void traverse(int traverseType)
          {
          switch(traverseType)
             {
             case 1: System.out.print("/nPreorder traversal: ");
                     preOrder(root);
                     break;
             case 2: System.out.print("/nInorder traversal:  ");
                     inOrder(root);
                     break;
             case 3: System.out.print("/nPostorder traversal: ");
                     postOrder(root);
                     break;
             }
          System.out.println();
          }
    // -------------------------------------------------------------
       private void preOrder(Node localRoot)
          {
          if(localRoot != null)
             {
             System.out.print(localRoot.iData + " ");
             preOrder(localRoot.leftChild);
             preOrder(localRoot.rightChild);
             }
          }
    // -------------------------------------------------------------
       private void inOrder(Node localRoot)
          {
          if(localRoot != null)
             {
             inOrder(localRoot.leftChild);
             System.out.print(localRoot.iData + " ");
             inOrder(localRoot.rightChild);
             }
          }
    // -------------------------------------------------------------
       private void postOrder(Node localRoot)
          {
          if(localRoot != null)
             {
             postOrder(localRoot.leftChild);
             postOrder(localRoot.rightChild);
             System.out.print(localRoot.iData + " ");
             }
          }
    // -------------------------------------------------------------
       public void displayTree()
          {
          Stack globalStack = new Stack();
          globalStack.push(root);
          int nBlanks = 32;
          boolean isRowEmpty = false;
          System.out.println(
          "......................................................");
          while(isRowEmpty==false)
             {
             Stack localStack = new Stack();
             isRowEmpty = true;

             for(int j=0; j<nBlanks; j++)
                System.out.print(' ');

             while(globalStack.isEmpty()==false)
                {
                Node temp = (Node)globalStack.pop();
                if(temp != null)
                   {
                   System.out.print(temp.iData);
                   localStack.push(temp.leftChild);
                   localStack.push(temp.rightChild);

                   if(temp.leftChild != null ||
                                       temp.rightChild != null)
                      isRowEmpty = false;
                   }
                else
                   {
                   System.out.print("--");
                   localStack.push(null);
                   localStack.push(null);
                   }
                for(int j=0; j<nBlanks*2-2; j++)
                   System.out.print(' ');
                }  // end while globalStack not empty
             System.out.println();
             nBlanks /= 2;
             while(localStack.isEmpty()==false)
                globalStack.push( localStack.pop() );
             }  // end while isRowEmpty is false
          System.out.println(
          "......................................................");
          }  // end displayTree()
    // -------------------------------------------------------------
       }  // end class Tree
    ////////////////////////////////////////////////////////////////
    class TreeApp
       {
       public static void main(String[] args) throws IOException
          {
          int value;
          Tree theTree = new Tree();

          theTree.insert(50, 1.5);
          theTree.insert(25, 1.2);
          theTree.insert(75, 1.7);
          theTree.insert(12, 1.5);
          theTree.insert(37, 1.2);
          theTree.insert(43, 1.7);
          theTree.insert(30, 1.5);
          theTree.insert(33, 1.2);
          theTree.insert(87, 1.7);
          theTree.insert(93, 1.5);
          theTree.insert(97, 1.5);

          while(true)
             {
             System.out.print("Enter first letter of show, ");
             System.out.print("insert, find, delete, or traverse: ");
             int choice = getChar();
             switch(choice)
                {
                case 's':
                   theTree.displayTree();
                   break;
                case 'i':
                   System.out.print("Enter value to insert: ");
                   value = getInt();
                   theTree.insert(value, value + 0.9);
                   break;
                case 'f':
                   System.out.print("Enter value to find: ");
                   value = getInt();
                   Node found = theTree.find(value);
                   if(found != null)
                      {
                      System.out.print("Found: ");
                      found.displayNode();
                      System.out.print("/n");
                      }
                   else
                      System.out.print("Could not find ");
                      System.out.print(value + '/n');
                   break;
                case 'd':
                   System.out.print("Enter value to delete: ");
                   value = getInt();
                   boolean didDelete = theTree.delete(value);
                   if(didDelete)
                      System.out.print("Deleted " + value + '/n');
                   else
                      System.out.print("Could not delete ");
                      System.out.print(value + '/n');
                   break;
                case 't':
                   System.out.print("Enter type 1, 2 or 3: ");
                   value = getInt();
                   theTree.traverse(value);
                   break;
                default:
                   System.out.print("Invalid entry/n");
                }  // end switch
             }  // end while
          }  // end main()
    // -------------------------------------------------------------
       public static String getString() throws IOException
          {
          InputStreamReader isr = new InputStreamReader(System.in);
          BufferedReader br = new BufferedReader(isr);
          String s = br.readLine();
          return s;
          }
    // -------------------------------------------------------------
       public static char getChar() throws IOException
          {
          String s = getString();
          return s.charAt(0);
          }
    //-------------------------------------------------------------
       public static int getInt() throws IOException
          {
          String s = getString();
          return Integer.parseInt(s);
          }
    // -------------------------------------------------------------
       }  // end class TreeApp
    ////////////////////////////////////////////////////////////////

  • 相关阅读:
    Monkey写脚本
    Appium+JAVA初试牛刀之安装APP
    新安家啦
    SRAM速度提升思路及方法
    FIR滤波器工作原理(算法)以及verilog算法实现(包含与IIR的一些对比)
    I2C总线协议详解
    有符号二进制加法溢出判断以及溢出后该如何计算正确答案
    Verilog 编写规范
    Android中锁屏密码算法解析以及破解方案
    IIS中查看W3P.exe进程对应的应用程序池的方法
  • 原文地址:https://www.cnblogs.com/encounter/p/2188867.html
Copyright © 2020-2023  润新知