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 ();}}