Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class ArrayList {
  6. private:
  7. int *elems; //tablica
  8. int first_elem; //pozycja pierwszego elementu
  9. int last_elem; //pozycja ostatniego elementu
  10. int list_capacity; //maksymalny rozmiar tablicy
  11. int list_size; //liczba elementów w tablicy
  12.  
  13. public:
  14. ArrayList(int c); //c - maksymalny rozmiar tablicy
  15. bool empty(); //zwraca prawdę jeśli lista pusta, fałsz w przeciwnym przypadku
  16. bool full(); //zwraca proawdę jeśli lista jest pełna, fałsz w przeciwnym przypadku
  17. int size(); //zwraca wielkość listy (liczbę elementów w liście)
  18. int capacity(); //zwraca pojemnośc listy
  19. int first(); //zwraca pozycję pierwszego elementu
  20. int last(); //zwraca pozycję ostatniego elementu
  21. int next(int p); //zwraca pozycję elementu następnego za p
  22. int prev(int p); //zwraca pozycję elementu poprzedzającego p
  23. int retrieve(int p); //zwraca element z pozycji p
  24. int locate(int x); //zwraca pozycję pierwszego wystąpienia elementu x, -1 jeśli x nie występuje
  25. void insert(int p, int x); //wstawia na pozycję p element x
  26. void append(int x); //wstawia x za ostatnim elementem listy
  27. void del(int p); //usuwa element z pozycji p
  28. void clear(); //usuwa całą listę
  29. void resize();
  30. void delX(int x);
  31. void delAllX(int x);
  32. bool concat(ArrayList &l);
  33. friend ostream& operator<<(ostream& out, ArrayList& l); //wypisuje elementy listy
  34. };
  35.  
  36.  
  37. ArrayList::ArrayList(int c) {
  38.  
  39. this->list_capacity = c;
  40. this->first_elem = 0;
  41. this->last_elem = -1;
  42. this->list_size = 0;
  43.  
  44. try {
  45. elems = new int[c];
  46. }
  47. catch (bad_alloc) {
  48. cout << "Error" << endl;
  49. }
  50.  
  51. }
  52.  
  53. bool ArrayList::empty() {
  54.  
  55. if (list_size == 0) return true;
  56.  
  57. return false;
  58. }
  59.  
  60. bool ArrayList::full() {
  61.  
  62. if (list_capacity == list_size) return true;
  63.  
  64. return false;
  65.  
  66. }
  67.  
  68. int ArrayList::size() {
  69.  
  70. return list_size;
  71.  
  72.  
  73. }
  74.  
  75. int ArrayList::capacity() {
  76.  
  77. return list_capacity;
  78.  
  79. }
  80.  
  81.  
  82. int ArrayList::first() {
  83. return first_elem;
  84. }
  85.  
  86. int ArrayList::last() {
  87. return last_elem;
  88. }
  89.  
  90.  
  91.  
  92. int ArrayList::next(int p) {
  93.  
  94. if (p == last_elem || p<0) throw(exception(""));
  95. return p + 1;
  96.  
  97. }
  98.  
  99. int ArrayList::prev(int p) {
  100.  
  101. if (p == first_elem || p<0) throw(exception(""));
  102. return p - 1;
  103.  
  104. }
  105.  
  106. int ArrayList::retrieve(int p) {
  107.  
  108. if (p > list_size || p < 0) throw(exception(""));
  109.  
  110. return elems[p];
  111.  
  112. }
  113.  
  114.  
  115. int ArrayList::locate(int x) {
  116.  
  117. for (int i = 0; i <= list_size - 1; i++) {
  118.  
  119. if (x == elems[i]) return i;
  120. }
  121.  
  122. return -1;
  123.  
  124. }
  125.  
  126.  
  127. void ArrayList::insert(int p, int x) {
  128.  
  129.  
  130. if (p<0 || p>last_elem + 1) throw(exception(""));
  131.  
  132. if (full()) resize();
  133.  
  134. for (int i = last_elem; i >= p; i--) {
  135.  
  136. elems[i + 1] = elems[i];
  137. }
  138.  
  139. list_size++;
  140. last_elem++;
  141.  
  142. elems[p] = x;
  143.  
  144. }
  145.  
  146. void ArrayList::append(int x) {
  147.  
  148. if (full()) return;
  149.  
  150.  
  151. elems[list_size] = x;
  152.  
  153. list_size++;
  154. last_elem++;
  155. }
  156.  
  157. void ArrayList::del(int p) {
  158.  
  159. if (p<0 || p>list_size) throw(exception(""));
  160.  
  161. for (int i = p; i < list_size - 1; i++) {
  162.  
  163. elems[i] = elems[i + 1];
  164. }
  165. list_size--;
  166. last_elem--;
  167. }
  168.  
  169.  
  170. void ArrayList::clear() {
  171.  
  172. this->first_elem = 0;
  173. this->last_elem = -1;
  174. this->list_size = 0;
  175.  
  176. }
  177.  
  178.  
  179. void ArrayList::resize() {
  180.  
  181.  
  182. int *tempArr = new int[sizeof(elems)];
  183.  
  184.  
  185.  
  186. for (int i = 0; i < list_size - 1; i++) {
  187. tempArr[i] = elems[i];
  188. }
  189.  
  190. clear();
  191.  
  192. try {
  193. elems = new int[list_capacity*1.5];
  194. }
  195. catch (bad_alloc) {
  196. cout << "Error" << endl;
  197. }
  198.  
  199. for (int i = 0; i < sizeof(tempArr); i++) {
  200. elems[i] = tempArr[i];
  201. }
  202.  
  203. list_size = sizeof(tempArr);
  204. last_elem = sizeof(tempArr);
  205.  
  206. }
  207.  
  208. void ArrayList::delX(int x) {
  209.  
  210. for (int i = locate(x); i < list_size - 1; i++) {
  211.  
  212. elems[i] = elems[i + 1];
  213. }
  214. list_size--;
  215. last_elem--;
  216.  
  217. }
  218.  
  219. void ArrayList::delAllX(int x) {
  220.  
  221. int xCount = 0;
  222.  
  223. for (int i = 0; i < list_size - 1; i++) {
  224. if (elems[i] == x) xCount++;
  225. }
  226.  
  227. for (int i = 0; i <= xCount; i++) {
  228. delX(x);
  229. }
  230.  
  231. }
  232.  
  233.  
  234. bool ArrayList::concat(ArrayList &l) {
  235.  
  236. if (list_size + l.list_size <= list_capacity) {
  237. for (int i = last_elem + 1; i <= l.list_size; i++) {
  238.  
  239. elems[i] = l.elems[i];
  240.  
  241. }
  242. return true;
  243. }
  244. else return false;
  245.  
  246. }
  247.  
  248.  
  249.  
  250.  
  251. ostream & operator <<(ostream &out, ArrayList &l) {
  252.  
  253. for (int i = 0; i < l.list_size; i++) {
  254.  
  255. cout << "[" << i << "] : " << l.elems[i] << endl;
  256.  
  257. }
  258. }
  259.  
  260.  
  261. int main()
  262. {
  263. ArrayList l(10);
  264.  
  265. cout << l.capacity() << endl;
  266.  
  267. l.append(5);
  268. l.append(6);
  269.  
  270. cout << l;
  271.  
  272. l.insert(1, 4);
  273.  
  274. cout << l;
  275.  
  276. l.append(8);
  277. l.append(7);
  278.  
  279. cout << l;
  280.  
  281. l.del(3);
  282.  
  283. cout << l;
  284.  
  285. return 0;
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement