Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.07 KB | None | 0 0
  1. /*NODU dæmi
  2. Búa til i c++ clasa sem heldur um eintengdanLista með þessum aðferðum
  3. 1)Upphafstilla tóman Lista
  4. 2)Insert at end (setja nodu i enda skjals)
  5. 3)Insert at K (setja nodu i sæti k)
  6. 4)Delete at end (eyða nodu aftast)
  7. 5)Delete at k ( eyða node i sæti k)
  8. 6)Search at k (finna nodu i sæti k)
  9. 7)Search by val (finna nodu með gildi val)
  10. 8)lenght (hverssu laangur er listi)
  11. 9)ToString (prentar allar Nodur)
  12. */
  13.  
  14.  
  15. #include <map>
  16. #include <vector>
  17. #include <fstream>
  18. #include <iostream>
  19. #include <string>
  20. #include <fstream>
  21. #include <unordered_set>
  22. #include <set>
  23.  
  24. using namespace std;
  25.  
  26. class Node {
  27. public:
  28. Node* next;
  29. int data;
  30. Node(int data, Node* next) {
  31. this->data = data;
  32. this->next = next;
  33. }
  34. };
  35. class EintengdurListi {
  36. public:
  37. Node * head;//Geymsla á hau Nodu
  38. int size;//geymsla á stærð Nodu
  39. //Smiður sem Upphafstillir tóman haus og stærð
  40. EintengdurListi() {
  41. this->head = NULL;
  42. this->size = 0;
  43. }
  44. //Insertion á nodu á endan
  45. void InsertNodeAtEnd(int data) {
  46. //athugar hvort Hausin okkar er tómur eða ekki ef tómur þá látum hausin vera nýja noda
  47. if (this->head == NULL) { this->head = new Node(data, NULL); this->size++; return; }
  48. //búum til current Node sem mun fara yfir listan ef við notum haus nodu fyrir
  49. //þetta þá missum við staðsetninguna á hausnum og þá eyðilegst all hjá okkur
  50. Node* curr = this->head;
  51. //förum i gengum allar nodur þangað til við erum komin að seinastu nodu og svo
  52. //búum til nýja nodu og tengjum seinustu nodu við hana
  53. while (curr->next != NULL) { curr = curr->next; }
  54. Node* nyrNode = new Node(data, NULL);//búum til nýja nodu
  55. curr->next = nyrNode;//tenjum seinustu nodu við nýja nodu okkar
  56. this->size++;//bætum stærð við
  57. }
  58. //Insertion á node i staðsetningu K
  59. void InsertNodeAtK(int data, int k) {
  60. //ef við erum að reyna að setja inn staðsetningu sem er of stór
  61. if (k > this->size) { cout << "Array Is Out of Range"; return; }
  62. //ef hann vill búa til haus Nodu
  63. if (k == 0) {
  64. //búum til nýja nodu með data og sem visar á hausin
  65. Node * NyrNoda= new Node(data, this->head);
  66. //gerum þessa nodu sem hausin þvi að þvi erum buin að tengja NyrNoda með hausin
  67. //við missum ekki staðsetninguna þegar við stillum hana sem nýjan haus
  68. this->head = NyrNoda;
  69. this->size++;
  70. return;//þarf alltaf að skila annars höldum við áfram
  71. }
  72. int i = 1; //teljari fyrir sætin
  73. Node* curr = this->head;//current
  74. //utaf ég þarf að setja nodu á milli tveim nodum þá þarf að halda um báðar nodur
  75. Node* currcurr = curr->next;
  76. while (currcurr != NULL) {
  77. if (i == k) {//ef ég er komin á staðsetninguna mina
  78. /* [curr]->[currcurr]
  79. [curr]->[NyrNoda]->[currcurr]*/
  80. Node* nyrNoda = new Node(data, currcurr);//by til nýja nodu og setja tengi við hana i þarnæstu nodu
  81. curr->next = nyrNoda;//tengi current nodu við nýjanodu
  82. this->size++;
  83. return;//hætti
  84. }
  85. i++;
  86. currcurr = currcurr->next;
  87. curr = curr->next;
  88. }
  89. //ef hann komst i genum all þá vitum við að seinasti staður sem þetta getur verið á er á endanum á lista
  90. InsertNodeAtEnd(data);
  91. }
  92. //Delete fyrir endan á listan
  93. void DeleteNodeAtEnd() {
  94. //Við erum bara með Haus nodu i listanum þá eyðym hana og hættum
  95. if (this->head->next == NULL) {this->head = NULL; this->size--; return; }
  96. Node* curr = this->head;
  97. //kikjum hvort þarnæsta noda er null eða ekki þvi við verðum að eyða seinustu nodu
  98. //og svo stilla næstseinustu lika þannig að hun myndi ekki visa á neitt
  99. while (curr->next->next != NULL) {curr = curr->next;}
  100. curr->next = NULL;//nullstillum næstseinasta bendill
  101. this->size--;
  102. }
  103. //Delete fyrir staðsetningu K
  104. void DeleteNodeAtK(int k) {
  105. if (k > this->size) { cout << "Array Is Out of Range"; return; }//ef við erum að eyða i sæti sem er ekki til
  106. if (k == 0) { this->head = this -> head->next; this->size--; }//ef við viljum eyða hausin þá færum okkur um einn
  107. int i = 1;
  108. Node * curr = this->head;
  109. //forum i gegnum allan lista
  110. while (curr->next != NULL) {
  111. if (i == k) {//komin á staðsetninguna okkar
  112. //eina sem við þurfum að gera er bara að hoppa yfir eina nodu
  113. curr->next = curr->next->next;
  114. this->size--;
  115. return;
  116. }
  117. curr = curr->next;
  118. i++;
  119. }
  120. DeleteNodeAtEnd();
  121. }
  122. //sem skilar gildi i sæti nodu K
  123. int SearchNodeAtK(int k) {
  124. if (k > this->size) { cout << "Array Is Out of Range"; return-1; }//ef við erum að eyða i sæti sem er ekki til
  125. Node * curr = this->head;
  126. int i = 0;
  127. //forum i gegnum nodur
  128. while (curr->next != NULL) {
  129. if (i == k) { return curr->data;}//ef við finnum tölu þá skilum við henni
  130. i++;
  131. curr = curr->next;
  132. }
  133. return -1;//ef við myndum komast herna sem myndi þiða villa
  134. }
  135. //fall sem skilar nodu með gildi v
  136. Node* GetNodeWithVal(int v) {
  137. Node* curr = this->head;
  138. //forum i gegnum listan þangað til við finnum nodu með gögn sem við erun að leita að
  139. while (curr!= NULL) {
  140. if (curr->data == v) { return curr; }//ef gildið er fundið þá skilum við nodu
  141. curr = curr->next;
  142. }
  143. return NULL;//ef það var einginn fund þá skilum við NULL
  144. }
  145. //fall sem skilar lengd á listanum
  146. int Lenght() {
  147. int i = 0;//breyta sem mun halda um lengd
  148. Node* curr = this->head;
  149. //fer i gegnum allar nodur og fyrir hverja nodu þá bæti við teljarann
  150. while (curr != NULL) {
  151. i++;
  152. curr = curr->next;
  153. }
  154. this->size = i;//gott að uppfæra size
  155. return i;
  156. }
  157. //Fall sem fer i gegnum allar nodur og skilar streng með alla nodu gildi
  158. string toString() {
  159. Node * curr = this->head;//curr
  160. string txt = "";//tómur strengur sem mun vera samskeitaður
  161. //forum ignum allar nodur og samskeitum gildin þeirra með strengin
  162. while (curr != NULL) {
  163. //fyrir hverja nodu samskeiti ég hana, ég noda to_string sem er aðferð ur #include <string>
  164. txt = txt + to_string(curr->data) + "|";
  165. curr = curr->next;
  166. }
  167. return txt;//skilum samskeitnum texta
  168. }
  169. };
  170.  
  171. int main() {
  172. EintengdurListi listi;
  173. listi.InsertNodeAtEnd(3);//testum fallið til að setja nodu fyrir haus
  174. listi.InsertNodeAtEnd(4);//test fyrir fallið til að setja nodu i enda
  175. listi.InsertNodeAtK(1, 0);//test fyrir að setja k sem nýjan haus
  176. listi.InsertNodeAtK(2, 1);//test fyrir að setja nodu á milli tvær nodur
  177. listi.InsertNodeAtK(5, 4);//test fyrir að setja nodu i enda
  178.  
  179. Node* Fundin = listi.GetNodeWithVal(2);//náum i nodu með gildi
  180. //--------------------------------------------------------------------------------------------
  181. //við teljum nodur frá 0-1-2-3-4
  182. cout << "gildi i saeti 3 er :" + to_string(listi.SearchNodeAtK(3)) << endl;//testum search fall
  183. cout << "Noda sem var fundin med gildi value 2 er fundin " + to_string(Fundin->data) << endl;
  184. //---------------------------------------------------------------------------------------
  185. cout << listi.toString()<< endl;
  186. cout << "Lend a listanum er :" + to_string(listi.Lenght()) << endl;//profum lengt fallið
  187. //---------------------------------------------------------------------------------------
  188. listi.DeleteNodeAtEnd();//eyðum seinustu nodu
  189. cout << listi.toString() << endl;//prentum út nyja listan
  190. cout << "Lend a listanum er :" + to_string(listi.Lenght()) << endl;//profum lengt fallið
  191. //---------------------------------------------------------------------------------------
  192. listi.DeleteNodeAtK(0);//test fyrir eyðslu á haus
  193. cout << listi.toString() << endl;
  194. cout << "Lend a listanum er :" + to_string(listi.Lenght()) << endl;//profum lengt fallið
  195. //---------------------------------------------------------------------------------------
  196. listi.DeleteNodeAtK(1);//test fyrir eyðslu milli hnuta
  197. cout << listi.toString() << endl;
  198. cout << "Lend a listanum er :" + to_string(listi.Lenght()) << endl;//profum lengt fallið
  199. //-------------------------------------------------------------------------------------
  200. listi.DeleteNodeAtK(1);//test fyrir á enda hnuts
  201. cout << listi.toString() << endl;
  202. cout << "Lend a listanum er :" + to_string(listi.Lenght()) << endl;//profum lengt fallið
  203. //--------------------------------------------------------------------------------------
  204. system("PAUSE");
  205. return 0;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement