Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int N = 2;
  5. class Array{
  6. private:
  7.  
  8. public:
  9.     Array *Next;
  10.     double *data;
  11.     int Size = 0;
  12.     Array()
  13.     {
  14.  
  15.         Next = nullptr;
  16.         data = new double[N];
  17.         for (int i = 0; i < N; ++i) {
  18.             data[i] = 0;
  19.         }
  20.     }
  21.     ~Array()
  22.     {
  23.         delete [] data;
  24.         /*while (first != NULL){
  25.           *next = first->next;
  26.          delete first;
  27.          first = next;
  28.        }
  29.      }*/
  30.  
  31.  
  32.     }
  33.     int getSize()
  34.     {
  35.         int I = 0;
  36.         Array *current = this;
  37.         while(current->Next != nullptr)
  38.         {
  39.             I+=current->Size;
  40.             current = current->Next;
  41.         }
  42.         return I+current->Size;
  43.     }
  44.     Array *CreateNode(){
  45.  
  46.         Array *ret = new Array();
  47.         //ret->data = new double [N];
  48.         ret->Next = nullptr;
  49.         return ret;
  50.     }
  51.     void PrintArray(){
  52.         Array *curr = this;
  53.         while(curr->Next != nullptr){
  54.             for (int i = 0; i < curr->Size; i++){
  55.                 cout << curr->data[i] << " ";
  56.             }
  57.             curr = curr->Next;
  58.         }
  59.         for (int i = 0; i < curr->Size; i++){
  60.             cout << curr->data[i] << " ";
  61.         }
  62.  
  63.     }
  64.     void push_back(double a)
  65.     {
  66.         Array *curr = this;
  67.         while (curr->Size == N && curr->Next != nullptr)
  68.         {
  69.             curr = curr->Next;
  70.             printf("!\n");
  71.         }
  72.  
  73.         if (curr->Size != N)
  74.         {
  75.             curr->data[curr->Size] = a;
  76.             curr->Size++;
  77.             return;
  78.  
  79.         }
  80.  
  81.         if (curr->Size == N)
  82.         {
  83.             curr->Next = CreateNode();
  84.             (curr->Next)->data[0] = a;
  85.             curr->Next->Size++;
  86.         }
  87.     }
  88.     void SortUp() {
  89.         double *A;
  90.         Array *curr = this;
  91.         bool t = true;
  92.         A = new double[this->getSize()];
  93.         for (int i = 0; i < this->getSize(); ++i) {
  94.             if (i != 0 && i % N == 0) {
  95.                 curr = curr->Next;
  96.             }
  97.             A[i] = curr->data[i % N];
  98.  
  99.         }
  100.         cout << A[0] << " " << A[1] << " " << A[2];
  101.  
  102.         cout << endl;
  103.         while (t) {
  104.             t = false;
  105.             for (int i = 0; i < this->getSize() - 1; ++i) {
  106.                 if (A[i] > A[i + 1]) {
  107.                     double tmp;
  108.                     tmp = A[i];
  109.                     A[i] = A[i + 1];
  110.                     A[i + 1] = tmp;
  111.                     t = true;
  112.                 }
  113.             }
  114.         }
  115.         curr = this;
  116.         for (int i = 0; i < this->getSize(); ++i) {
  117.             if (i != 0 && i % N == 0) {
  118.                 curr = curr->Next;
  119.             }
  120.             curr->data[i % N] = A[i];
  121.  
  122.         }
  123.         cout << A[0] << " " << A[1] << " " << A[2];
  124.     }
  125.     void swap(int i1,int i2){
  126.         Array *curr1 = this;
  127.         Array *curr2 = this;
  128.         for(int i=0;i<i1/N;i++){
  129.             curr1=curr1->Next;
  130.         }
  131.         for(int i=0;i<i2/N;i++){
  132.             curr2=curr2->Next;
  133.         }
  134.         double tmp;
  135.         tmp=curr1->data[i1%N];
  136.         curr1->data[i1%N]=curr2->data[i2%N];
  137.         curr2->data[i2%N]=tmp;
  138.     }
  139.     bool Search_Binary (double key)
  140.     {
  141.         double *A;
  142.         Array *curr = this;
  143.         bool t = true;
  144.         A = new double[this->getSize()];
  145.         for (int i = 0; i < this->getSize(); ++i) {
  146.             if (i != 0 && i % N == 0) {
  147.                 curr = curr->Next;
  148.             }
  149.             A[i] = curr->data[i % N];
  150.  
  151.         }
  152.         while (t) {
  153.             t = false;
  154.             for (int i = 0; i < this->getSize() - 1; ++i) {
  155.                 if (A[i] > A[i + 1]) {
  156.                     double tmp;
  157.                     tmp = A[i];
  158.                     A[i] = A[i + 1];
  159.                     A[i + 1] = tmp;
  160.                     t = true;
  161.                 }
  162.  
  163.             }
  164.         }
  165.         int left = 0;
  166.         int right = this->getSize();
  167.         int midd = 0;
  168.         while (1)
  169.         {
  170.             midd = (left + right) / 2;
  171.  
  172.             if (key < A[midd])
  173.                 right = midd - 1;
  174.             else if (key > A[midd])
  175.                 left = midd + 1;
  176.             else
  177.                 return true;
  178.             if (left > right)
  179.                 return 0;
  180.         }
  181.     }
  182.     double * Link(int index){
  183.         auto curr = this;
  184.         for(int i = 0; i < index/N; ++i){
  185.             curr = curr->Next;
  186.         }
  187.         return &curr->data[index%N];
  188.     }
  189.  
  190.     void Insert(int index, double x){
  191.         this->push_back(x);
  192.         for(int i = this->getSize()-1; i > index; --i){
  193.             this->swap(i,i-1);
  194.         }
  195.     }
  196.  
  197.     void Delete(int index){
  198.         auto curr = this;
  199.         for (int i = 0; i < this->getSize()/N - 1; i++){
  200.             curr = curr->Next;
  201.         }
  202.         for (int i = index; i < this->getSize()-1; ++i){
  203.             swap(i, i + 1);
  204.         }
  205.         if (this->getSize()%N == 1 && index != 1){
  206.             delete [] curr->Next->data;
  207.             curr->Next = nullptr;
  208.         }
  209.         else{
  210.             curr->Size--;
  211.         }
  212.     }
  213.     void SortDown(){
  214.         double *A;
  215.         Array *curr = this;
  216.         bool t = true;
  217.         A = new double [this->getSize()];
  218.         for(int i = 0; i < this->getSize(); ++i){
  219.             if(i != 0 && i % N == 0)
  220.             {
  221.                 curr = curr->Next;
  222.             }
  223.             A[i] = curr->data[i%N];
  224.             cout << A[i] << " ";
  225.  
  226.         }
  227.         cout << endl;
  228.         while(t){
  229.             t=false;
  230.             for(int i = this->getSize()-1; i > 0; --i){
  231.                 if(A[i]>A[i-1]){
  232.                     double tmp;
  233.                     tmp=A[i];
  234.                     A[i]=A[i-1];
  235.                     A[i-1]=tmp;
  236.                     t=true;
  237.                 }
  238.  
  239.             }
  240.         }
  241.         curr = this;
  242.         for(int i = 0; i < this->getSize(); ++i){
  243.             if(i != 0 && i % N == 0)
  244.             {
  245.                 curr = curr->Next;
  246.             }
  247.             curr->data[i%N] = A[i];
  248.  
  249.         }
  250.     }
  251.  
  252. };
  253.  
  254.  
  255. int main()
  256. {
  257.     Array A;
  258.     A.push_back(6);
  259.     A.push_back(3);
  260.     A.push_back(10);
  261.     A.PrintArray();
  262.     A.SortUp();
  263.     Array *curr, *nextcurr;
  264.     curr = A.Next;
  265.     while(curr != NULL){
  266.         if (curr->Next!=NULL) nextcurr = curr->Next; else nextcurr =NULL;
  267.         delete curr;
  268.         curr = nextcurr;
  269.  
  270.     }
  271.  
  272.     /*istream file("file.txt");
  273.      *
  274.     while(fin){
  275.         string str;
  276.         Array A;
  277.         fin >> str;
  278.         if(str == "pb")
  279.         {
  280.             int x;
  281.             fin >> x;
  282.             A.push_back(x);
  283.         }
  284.     }*/
  285.     return 0;
  286.  
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement