Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. /*Búa þarf til Geniric clasa
  2. *1)Búa til ForgangsBiðröð sem getur tekur annaðhvort int,double eða stafró
  3. *2)Þarf að útbúa Vector sem þið smiðið sjálf
  4. * 2.1)Vector á að vera fylki sem byrjar með stærð 2
  5. * 2.2)Ef það eru ekki nógu mörg stök i vector þá tvöfaldast allt fylki i stærð
  6. *3)á að geta Sett inn i forgangs biðröð (Enqueu)
  7. *4)á að geta eytt úr henni (Dequeu) og skilað gildið
  8. *5)To string prentar út röðina
  9. * */
  10.  
  11. /*þarf að hafa <t> <- þetta þyðir að þetta getur tekið öll "Generic types af data" i.e int string double ....
  12. extends Comparable<T> veitir okkur aðgang að nota compareTo fallið */
  13. class GenricForQueu <T extends Comparable<T>>{
  14. private Object[] PrioQueue;//upphafsStillum Fylkið okkar
  15. private int capacity;//geymir hverssu mörg stök erum við með i Biðröðini
  16. //upphafstilla
  17. public GenricForQueu(){
  18. this.PrioQueue = new Object[2];
  19. this.capacity=0;
  20. }
  21. //--------------------------------------------------------------------------------------------------
  22. //fallið til að til að setja inn gildi
  23. public void Enqueue (T data){
  24. //áður en við setjum i biðröðina það þarf a athuga hvort við erum með laust pláss i Fylkinu okkar
  25. if(this.PrioCap()+1 >= this.PrioSize()){this.DoublePrio();}
  26. //ef stakið er fyrsta stakið
  27. if(this.capacity == 0){this.PrioQueue[0]=data;this.capacity++;return;}
  28. /*utaf það er ekki hæght að setja á milli tvo stök, það sem þarf að gera er að finna hvar á gildið
  29. * að vera og svo hliðra öll stök svo setja gildið á réttan stað*/
  30. int pos=0;//saðstning þar sem gildið á að koma
  31. boolean found = false;//athugum hvort við fundum eigvað
  32. //forum igegnum öll stök og finnum hvar i fylki þarf gildið a vera
  33. for(int i=0; i< this.PrioCap();i++){if(data.compareTo((T) this.PrioQueue[i]) > 0){pos=i;found=true;break;}}
  34. //ef gildið er fundið þá hliðrum við öll gildi um eitt til að gera pláss fyrir data
  35. if(found){
  36. for(int i = this.PrioCap()+1; i > pos ;i--){this.PrioQueue[i] = this.PrioQueue[i-1];}
  37. this.PrioQueue[pos]=data;
  38. this.capacity++;
  39. return;
  40. }
  41. //ef við komumst herna þá vitum við að þetta hlytur að vera siðasta stackið a.k.a minnsta
  42. this.PrioQueue[this.PrioCap()]=data;
  43. this.capacity++;
  44. }
  45. //fall til að eyða
  46. public T DeQueue(){
  47. if(this.capacity < 0){return null;}//athugum hvort það er öruglega nógu mikið af stökum
  48. T data = (T) this.PrioQueue[0];//náum i stærsta stakið
  49. //hliðrum öll gildi um eitt
  50. for(int i =0;i < this.PrioCap();i++){
  51. this.PrioQueue[i]=this.PrioQueue[i+1];
  52. }
  53. this.capacity--;
  54. return data;//skilum gögn
  55.  
  56. }
  57. public String toString(){
  58. String a="";
  59. for(int i =0;i < this.PrioCap();i++){a = a+this.PrioQueue[i]+"|";}
  60. return a;
  61. }
  62. //fallið DoublePrio tvöfaldar stærð á fylkinu
  63. private void DoublePrio(){
  64. //utaf það er ekki hæght að afrita fylki,
  65. //það þarf að fyrst að setja öll gögn i temporary fylki
  66. //svo tvöfalda aðalfylki og svo setja öll gögnin tilbaka
  67. Object[] temp = new Object[this.PrioSize()];
  68. for(int i =0;i < this.PrioSize();i++){temp[i] = (T) this.PrioQueue[i];}
  69. this.PrioQueue = new Object[this.PrioSize()*2];
  70. for(int i =0;i < temp.length;i++){ this.PrioQueue[i]=temp[i];}
  71. }
  72. public int PrioSize(){return this.PrioQueue.length;}//skilar stærð fylkiðs
  73. public int PrioCap(){return this.capacity;}//skilar fjölda staka i fylki
  74. //-----------------------------------------------------------------------------
  75. public static void main(String[] args) {
  76. //Tilraun Fyrir Int
  77. GenricForQueu<Integer> intPrio =new GenricForQueu<Integer>();
  78. intPrio.Enqueue(2);
  79. intPrio.Enqueue(1);
  80. intPrio.Enqueue(10);
  81. System.out.println(intPrio.toString());
  82. System.out.println(intPrio.DeQueue());
  83. System.out.println(intPrio.DeQueue());
  84. System.out.println(intPrio.DeQueue());
  85. //TilRaun fyrir String
  86. GenricForQueu<String> stringPrio =new GenricForQueu<String>();
  87. stringPrio.Enqueue("a");
  88. stringPrio.Enqueue("b");
  89. stringPrio.Enqueue("c");
  90. System.out.println(stringPrio.toString());
  91. System.out.println(stringPrio.DeQueue());
  92. System.out.println(stringPrio.DeQueue());
  93. System.out.println(stringPrio.DeQueue());
  94. }
  95.  
  96.  
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement