Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int N = 2;
- class Array{
- private:
- public:
- Array *Next;
- double *data;
- int Size = 0;
- Array()
- {
- Next = nullptr;
- data = new double[N];
- for (int i = 0; i < N; ++i) {
- data[i] = 0;
- }
- }
- ~Array()
- {
- delete [] data;
- /*while (first != NULL){
- *next = first->next;
- delete first;
- first = next;
- }
- }*/
- }
- int getSize()
- {
- int I = 0;
- Array *current = this;
- while(current->Next != nullptr)
- {
- I+=current->Size;
- current = current->Next;
- }
- return I+current->Size;
- }
- Array *CreateNode(){
- Array *ret = new Array();
- //ret->data = new double [N];
- ret->Next = nullptr;
- return ret;
- }
- void PrintArray(){
- Array *curr = this;
- while(curr->Next != nullptr){
- for (int i = 0; i < curr->Size; i++){
- cout << curr->data[i] << " ";
- }
- curr = curr->Next;
- }
- for (int i = 0; i < curr->Size; i++){
- cout << curr->data[i] << " ";
- }
- }
- void push_back(double a)
- {
- Array *curr = this;
- while (curr->Size == N && curr->Next != nullptr)
- {
- curr = curr->Next;
- printf("!\n");
- }
- if (curr->Size != N)
- {
- curr->data[curr->Size] = a;
- curr->Size++;
- return;
- }
- if (curr->Size == N)
- {
- curr->Next = CreateNode();
- (curr->Next)->data[0] = a;
- curr->Next->Size++;
- }
- }
- void SortUp() {
- double *A;
- Array *curr = this;
- bool t = true;
- A = new double[this->getSize()];
- for (int i = 0; i < this->getSize(); ++i) {
- if (i != 0 && i % N == 0) {
- curr = curr->Next;
- }
- A[i] = curr->data[i % N];
- }
- cout << A[0] << " " << A[1] << " " << A[2];
- cout << endl;
- while (t) {
- t = false;
- for (int i = 0; i < this->getSize() - 1; ++i) {
- if (A[i] > A[i + 1]) {
- double tmp;
- tmp = A[i];
- A[i] = A[i + 1];
- A[i + 1] = tmp;
- t = true;
- }
- }
- }
- curr = this;
- for (int i = 0; i < this->getSize(); ++i) {
- if (i != 0 && i % N == 0) {
- curr = curr->Next;
- }
- curr->data[i % N] = A[i];
- }
- cout << A[0] << " " << A[1] << " " << A[2];
- }
- void swap(int i1,int i2){
- Array *curr1 = this;
- Array *curr2 = this;
- for(int i=0;i<i1/N;i++){
- curr1=curr1->Next;
- }
- for(int i=0;i<i2/N;i++){
- curr2=curr2->Next;
- }
- double tmp;
- tmp=curr1->data[i1%N];
- curr1->data[i1%N]=curr2->data[i2%N];
- curr2->data[i2%N]=tmp;
- }
- bool Search_Binary (double key)
- {
- double *A;
- Array *curr = this;
- bool t = true;
- A = new double[this->getSize()];
- for (int i = 0; i < this->getSize(); ++i) {
- if (i != 0 && i % N == 0) {
- curr = curr->Next;
- }
- A[i] = curr->data[i % N];
- }
- while (t) {
- t = false;
- for (int i = 0; i < this->getSize() - 1; ++i) {
- if (A[i] > A[i + 1]) {
- double tmp;
- tmp = A[i];
- A[i] = A[i + 1];
- A[i + 1] = tmp;
- t = true;
- }
- }
- }
- int left = 0;
- int right = this->getSize();
- int midd = 0;
- while (1)
- {
- midd = (left + right) / 2;
- if (key < A[midd])
- right = midd - 1;
- else if (key > A[midd])
- left = midd + 1;
- else
- return true;
- if (left > right)
- return 0;
- }
- }
- double * Link(int index){
- auto curr = this;
- for(int i = 0; i < index/N; ++i){
- curr = curr->Next;
- }
- return &curr->data[index%N];
- }
- void Insert(int index, double x){
- this->push_back(x);
- for(int i = this->getSize()-1; i > index; --i){
- this->swap(i,i-1);
- }
- }
- void Delete(int index){
- auto curr = this;
- for (int i = 0; i < this->getSize()/N - 1; i++){
- curr = curr->Next;
- }
- for (int i = index; i < this->getSize()-1; ++i){
- swap(i, i + 1);
- }
- if (this->getSize()%N == 1 && index != 1){
- delete [] curr->Next->data;
- curr->Next = nullptr;
- }
- else{
- curr->Size--;
- }
- }
- void SortDown(){
- double *A;
- Array *curr = this;
- bool t = true;
- A = new double [this->getSize()];
- for(int i = 0; i < this->getSize(); ++i){
- if(i != 0 && i % N == 0)
- {
- curr = curr->Next;
- }
- A[i] = curr->data[i%N];
- cout << A[i] << " ";
- }
- cout << endl;
- while(t){
- t=false;
- for(int i = this->getSize()-1; i > 0; --i){
- if(A[i]>A[i-1]){
- double tmp;
- tmp=A[i];
- A[i]=A[i-1];
- A[i-1]=tmp;
- t=true;
- }
- }
- }
- curr = this;
- for(int i = 0; i < this->getSize(); ++i){
- if(i != 0 && i % N == 0)
- {
- curr = curr->Next;
- }
- curr->data[i%N] = A[i];
- }
- }
- };
- int main()
- {
- Array A;
- A.push_back(6);
- A.push_back(3);
- A.push_back(10);
- A.PrintArray();
- A.SortUp();
- Array *curr, *nextcurr;
- curr = A.Next;
- while(curr != NULL){
- if (curr->Next!=NULL) nextcurr = curr->Next; else nextcurr =NULL;
- delete curr;
- curr = nextcurr;
- }
- /*istream file("file.txt");
- *
- while(fin){
- string str;
- Array A;
- fin >> str;
- if(str == "pb")
- {
- int x;
- fin >> x;
- A.push_back(x);
- }
- }*/
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement