Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class ArrayList {
- private:
- int *elems; //tablica
- int first_elem; //pozycja pierwszego elementu
- int last_elem; //pozycja ostatniego elementu
- int list_capacity; //maksymalny rozmiar tablicy
- int list_size; //liczba elementów w tablicy
- public:
- ArrayList(int c); //c - maksymalny rozmiar tablicy
- bool empty(); //zwraca prawdę jeśli lista pusta, fałsz w przeciwnym przypadku
- bool full(); //zwraca proawdę jeśli lista jest pełna, fałsz w przeciwnym przypadku
- int size(); //zwraca wielkość listy (liczbę elementów w liście)
- int capacity(); //zwraca pojemnośc listy
- int first(); //zwraca pozycję pierwszego elementu
- int last(); //zwraca pozycję ostatniego elementu
- int next(int p); //zwraca pozycję elementu następnego za p
- int prev(int p); //zwraca pozycję elementu poprzedzającego p
- int retrieve(int p); //zwraca element z pozycji p
- int locate(int x); //zwraca pozycję pierwszego wystąpienia elementu x, -1 jeśli x nie występuje
- void insert(int p, int x); //wstawia na pozycję p element x
- void append(int x); //wstawia x za ostatnim elementem listy
- void del(int p); //usuwa element z pozycji p
- void clear(); //usuwa całą listę
- void resize();
- void delX(int x);
- void delAllX(int x);
- bool concat(ArrayList &l);
- friend ostream& operator<<(ostream& out, ArrayList& l); //wypisuje elementy listy
- };
- ArrayList::ArrayList(int c) {
- this->list_capacity = c;
- this->first_elem = 0;
- this->last_elem = -1;
- this->list_size = 0;
- try {
- elems = new int[c];
- }
- catch (bad_alloc) {
- cout << "Error" << endl;
- }
- }
- bool ArrayList::empty() {
- if (list_size == 0) return true;
- return false;
- }
- bool ArrayList::full() {
- if (list_capacity == list_size) return true;
- return false;
- }
- int ArrayList::size() {
- return list_size;
- }
- int ArrayList::capacity() {
- return list_capacity;
- }
- int ArrayList::first() {
- return first_elem;
- }
- int ArrayList::last() {
- return last_elem;
- }
- int ArrayList::next(int p) {
- if (p == last_elem || p<0) throw(exception(""));
- return p + 1;
- }
- int ArrayList::prev(int p) {
- if (p == first_elem || p<0) throw(exception(""));
- return p - 1;
- }
- int ArrayList::retrieve(int p) {
- if (p > list_size || p < 0) throw(exception(""));
- return elems[p];
- }
- int ArrayList::locate(int x) {
- for (int i = 0; i <= list_size - 1; i++) {
- if (x == elems[i]) return i;
- }
- return -1;
- }
- void ArrayList::insert(int p, int x) {
- if (p<0 || p>last_elem + 1) throw(exception(""));
- if (full()) resize();
- for (int i = last_elem; i >= p; i--) {
- elems[i + 1] = elems[i];
- }
- list_size++;
- last_elem++;
- elems[p] = x;
- }
- void ArrayList::append(int x) {
- if (full()) return;
- elems[list_size] = x;
- list_size++;
- last_elem++;
- }
- void ArrayList::del(int p) {
- if (p<0 || p>list_size) throw(exception(""));
- for (int i = p; i < list_size - 1; i++) {
- elems[i] = elems[i + 1];
- }
- list_size--;
- last_elem--;
- }
- void ArrayList::clear() {
- this->first_elem = 0;
- this->last_elem = -1;
- this->list_size = 0;
- }
- void ArrayList::resize() {
- int *tempArr = new int[sizeof(elems)];
- for (int i = 0; i < list_size - 1; i++) {
- tempArr[i] = elems[i];
- }
- clear();
- try {
- elems = new int[list_capacity*1.5];
- }
- catch (bad_alloc) {
- cout << "Error" << endl;
- }
- for (int i = 0; i < sizeof(tempArr); i++) {
- elems[i] = tempArr[i];
- }
- list_size = sizeof(tempArr);
- last_elem = sizeof(tempArr);
- }
- void ArrayList::delX(int x) {
- for (int i = locate(x); i < list_size - 1; i++) {
- elems[i] = elems[i + 1];
- }
- list_size--;
- last_elem--;
- }
- void ArrayList::delAllX(int x) {
- int xCount = 0;
- for (int i = 0; i < list_size - 1; i++) {
- if (elems[i] == x) xCount++;
- }
- for (int i = 0; i <= xCount; i++) {
- delX(x);
- }
- }
- bool ArrayList::concat(ArrayList &l) {
- if (list_size + l.list_size <= list_capacity) {
- for (int i = last_elem + 1; i <= l.list_size; i++) {
- elems[i] = l.elems[i];
- }
- return true;
- }
- else return false;
- }
- ostream & operator <<(ostream &out, ArrayList &l) {
- for (int i = 0; i < l.list_size; i++) {
- cout << "[" << i << "] : " << l.elems[i] << endl;
- }
- }
- int main()
- {
- ArrayList l(10);
- cout << l.capacity() << endl;
- l.append(5);
- l.append(6);
- cout << l;
- l.insert(1, 4);
- cout << l;
- l.append(8);
- l.append(7);
- cout << l;
- l.del(3);
- cout << l;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement