Java Data Structure-queue

Source: Internet
Author: User

1. Use a linked list to implement one-way queues

 
Package COM. jzm. stackqueuetree; public class linkqueue <t> {// implement one-way queue private node firstnode; private node lastnode; Public linkqueue () {firstnode = NULL; lastnode = NULL ;} // end constructor private class node {// internal node private t data; private node next; private node (t data) {This. data = data; this. next = NULL;} // end constructor private t getdata () {return data;} private node getnextnode () {return next;} private void setnextnode (node N) {This. next = n ;}// end class node private Boolean isempty () {return firstnode = NULL;} // end isempty determines whether it is null public void enqueue (T newentry) {node newnode = new node (newentry); If (isempty ()){
Firstnode = newnode; lastnode = newnode;} else {lastnode. setnextnode (newnode); lastnode = newnode; }}// end enqueue Add a new element public t getfront () {// retrieve the front-end element T front = NULL; If (! Isempty () Front = firstnode. Data; return front;} // get the element public t deletequeue () {T front = NULL from the front end of the queue; If (! Isempty () {front = firstnode. getdata (); firstnode = firstnode. getnextnode () ;}if (firstnode = NULL) {// if there is only one element, if it is deleted as null, the end node should also be empty. lastnode = NULL ;} return front;} // end deletequeue public void clear () {firstnode = NULL; lastnode = NULL;} // end clear public void display () {If (isempty ()) {system. out. println ("queue is empty");} else {node point = firstnode; while (point! = NULL) {system. out. println (point. getdata (); point = point. getnextnode () ;}} public static void main (string [] ARGs) {linkqueue <integer> linkqueue = new linkqueue <integer> (); linkqueue. enqueue (1); linkqueue. enqueue (2); linkqueue. enqueue (3); linkqueue. display (); linkqueue. deletequeue (); linkqueue. deletequeue (); linkqueue. deletequeue (); linkqueue. display ();}}

2. Use arrays to implement queues

 

Package COM. jzm. stackqueuetree; public class arrayqueue <t> {/*** use a variable array to implement a circular queue */private T [] queue; private int frontindex; private int backindex; private Static final int maxsize = 3; // public arrayqueue () {queue = (T []) New object [maxsize]; frontindex =-1; backindex =-1;} public arrayqueue (INT initsize) {queue = (T []) New object [initsize + 1]; frontindex =-1; backindex =-1 ;} // end con Structor private Boolean isempty () {return (frontindex + backindex =-2) & frontindex = (backindex % queue. length);} // determines whether the queue is empty. Private Boolean isarrayfull () {return frontindex = (backindex + 1) % queue. length);} // end full judge whether the array is full public void enqueue (T newentry) {If (isempty () {system. out. println ("if it is null, frontindex =" + frontindex); system. out. println ("if it is null, backindex =" + backindex); frontindex = (frontindex + 1) % Queue. length; queue [frontindex] = newentry; backindex = (backindex + 1) % queue. length;} else {If (isarrayfull () {system. out. println ("added" + newentry + ", the queue is full, waiting for allocation"); system. out. println ("frontindex =" + frontindex); system. out. println ("backindex =" + backindex); doublearray ();} backindex = (backindex + 1) % queue. length; queue [backindex] = newentry;} // end enqueue public t getfront () {T front = NULL; If (! Isempty () {front = queue [frontindex];} return front;} // end getfront obtains the public t deletequeue () {T front = NULL; If (! Isempty () {front = queue [frontindex]; queue [frontindex] = NULL; frontindex = (frontindex + 1) % queue. length;} // end if return front;} // end deletequeue; Delete the queue header node public void learray () {T [] oldqueue = queue; int oldsize = queue. length; system. out. println ("oldsize =" + oldsize); queue = (T []) New object [2 * oldsize]; for (INT I = 0; I <oldsize; I ++) {queue [I] = oldqueue [frontindex]; frontindex = (frontindex + 1) % oldsize;} // end for frontindex = 0; backindex = oldsize-1 ;} // end doublearray public void display () {If (frontindex <backindex) {// There is no loop for (INT I = frontindex; I <= backindex; I ++) system. out. println (queue [I]);} else {for (INT I = frontindex; I <queue. length; I ++) {system. out. println (queue [I]);} For (INT I = 0; I <= backindex; I ++) {system. out. println (queue [I]) ;}}// value of the output queue public static void main (string [] ARGs) {arrayqueue <integer> arrayqueue = new arrayqueue <integer> (); arrayqueue. enqueue (1); arrayqueue. enqueue (2); arrayqueue. enqueue (3); arrayqueue. enqueue (4); arrayqueue. enqueue (5); arrayqueue. enqueue (6); arrayqueue. enqueue (7); arrayqueue. deletequeue (); arrayqueue. deletequeue (); arrayqueue. enqueue (8); system. out. println ("------------------"); arrayqueue. display ();}}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.