Array.h
#pragma once #include<iostream> using namespace std; class Array { public: int* data; int len; int maxSize; Array(int size = 30) { maxSize = size; data = new int[maxSize]; len = 0; } void creat(int arr[], int n) { for (int i = 0; i < n; i++) { data[i] = arr[i]; len++; } } void remove(int i) { for (int j = i; j < len - 1; j++) { data[j] = data[j + 1]; } len--; } void show() { for (int i = 0; i < len; i++) { cout << data[i] << " "; } cout << endl; } /** (1)从顺序表中删除具有最小值的元素并由 函数返回被删元素的值。空出的位置由最后一 个元素填补,若顺序表为空则显示出错误信息 并退出执行 */ int fun_1() { if (len <= 0) { cerr << "empty!!!" << endl; exit(1); } int min; int temp; int index=0; min = data[0]; for (int i = 0; i < len; i++) { if (data[i] < min) { index = i; min = data[i]; } } temp = data[index]; data[index] = data[len - 1]; len--; return temp; } /** (2)从顺序表中删除第i个元素并由函数返回被删元素的值。 如果i不合理或顺序表为空则显示错误信息并退出。 */ int fun_2(int i) { if (i > len || i <= 0) { cerr << "Out Of Bounds!!!!" << endl; exit(1); } if (len <= 0) { cerr << "empty!!!" << endl; exit(1); } int temp; temp = data[i - 1]; for (int j = i - 1; i < len; i++) { data[i] = data[i + 1]; } len--; return temp; } /** (3)向顺序表中第i个位置插入一个新元素x。如果i不合理,则显示错误信息并退出运行。 */ void fun_3(int i, int x) { if (i > len || i <= 0) { cerr << "Out Of Bounds!!!!" << endl; exit(1); } for (int j = len; j >= i; j--) { data[j] = data[j - 1]; } data[i - 1] = x; len++; } /** (4)从顺序表中删除具有给定值x的所有元素。 */ void fun_4(int x) { //算法要注意,这是时间复杂度低一些的算法! int k = 0; for (int i = 0; i < len; i++) { if (data[i] != x) { data[k] = data[i]; k++; } } len = k ; } /** (5)从顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。 如果s或t不合理或 顺序表为空则显示错误信息并退出。 */ void fun_5(int s, int t) { //算法要注意,这是时间复杂度低一些的算法! if (s >= t || len <= 0) { cerr << "Error!!!!" << endl; exit(1); } int k = 0; for (int i = 0; i < len; i++) { if (data[i]<s || data[i]>t) { data[k] = data[i]; k++; } } len = k; } /** (6)从“有序”顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。 如果s或t不合理或 顺序表为空则显示错误信息并退出。 */ void fun_6(int s, int t) { if (s >= t || len <= 0) { cerr << "Error!!!!" << endl; exit(1); } int index_s = -1, index_t = -1; for (int i = 0; i < len; i++) { if (data[i] == s) { index_s = i; } else if (data[i] == t) { index_t = i; } } int gap = t - s + 1; for (int i = index_s; i < len - gap; i++) { data[i] = data[i + gap]; } len -= gap; } /** (7)将两个有序顺序表合并成一个新的有序顺序表 并由 函数返回结果顺序表 */ Array fun_7(Array B) { Array C; int p_c = 0; int p_a = 0; int p_b = 0; if (data[len - 1] > B.data[B.len - 1]) { while (p_b < B.len) { if (data[p_a] < B.data[p_b]) { C.data[p_c] = data[p_a]; p_a++; } else { C.data[p_c] = B.data[p_b]; p_b++; } p_c++; } while (p_a < len) { C.data[p_c] = data[p_a]; p_a++; p_c++; } } else { while (p_a < len) { if (data[p_a] < B.data[p_b]) { C.data[p_c] = data[p_a]; p_a++; } else { C.data[p_c] = B.data[p_b]; p_b++; } p_c++; } while (p_b < B.len) { C.data[p_c] = B.data[p_b]; p_b++; p_c++; } } C.len = len + B.len; return C; } /** (8)从顺序表中删除所有 其值重复的元素,使表中的所有元素的值都不相等。 */ void fun_8() { for (int i = 0; i < len; i++) { for (int j = i+1; j < len; j++) { if (data[j] == data[i]) { remove(j); } } } } };
main.cpp
#include"Array.h" int main() { cout << "Test 01:" << endl; Array A_1; int a_1[] = { 5,1,2,78,3,-8,-2,-5,4,-45,26,74,12,3256 }; A_1.creat(a_1, 14); A_1.show(); int elem_1 = A_1.fun_1(); cout << elem_1 << endl; A_1.show(); cout << "---------------------" << endl; cout << "Test 02:" << endl; Array A_2; int a_2[] = { 1,2,3,4,5,6,7,8,9 }; A_2.creat(a_2, 9); A_2.show(); int elem_2 = A_2.fun_2(6); cout << elem_2 << endl; A_2.show(); cout << "---------------------" << endl; cout << "Test 03:" << endl; Array A_3; int a_3[] = { 1,2,3,4,5,6,7,8,9 }; A_3.creat(a_3, 9); A_3.show(); A_3.fun_3(5, 666); A_3.show(); cout << "-----------------------" << endl; cout << "Test 04:" << endl; Array A_4; int a_4[] = { 9,1,5,9,7,5,9,1,6,9,4,9,2,9 }; A_4.creat(a_4, 13); A_4.show(); A_4.fun_4(9); A_4.show(); cout << "---------------------" << endl; cout << "Test 05:" << endl; Array A_5; int a_5[] = { 1,9,7,4,7,6,3,2,9 }; A_5.creat(a_5, 9); A_5.show(); A_5.fun_5(3, 6); A_5.show(); cout << "---------------------" << endl; cout << "Test 06:" << endl; Array A_6; int a_6[] = { 1,2,3,4,5,6,7,8,9 }; A_6.creat(a_6, 9); A_6.show(); A_6.fun_6(3, 6); A_6.show(); cout << "---------------------" << endl; cout << "Test 07:" << endl; Array A_71; int a_71[] = { 1,3,5,7,9 }; A_71.creat(a_71, 5); A_71.show(); Array A_72; int a_72[] = { 2,4,6,8,12 }; A_72.creat(a_72, 5); A_72.show(); Array A_73; A_73 = A_71.fun_7(A_72); A_73.show(); cout << "---------------------" << endl; cout << "Test 08:" << endl; Array A_8; int a_8[] = { 1,2,3,4,1,3,6,9 }; A_8.creat(a_8, 8); A_8.show(); A_8.fun_8(); A_8.show(); return 0; }
原文:https://www.cnblogs.com/SlowIsFast/p/12509622.html