#include #include #include #include class Vec { private: int *v; int LEN; int USED; void expand(); void shrink(); public: Vec(int len); int get(int a); void put(int a, int value); void swap(int a, int b); int insert(int locate, int value); int del(int locate, int value); int find(int value); void printall(); int getlen(); int getused(); }; Vec::Vec(int len) { LEN = len * 2; v = new int[LEN]; USED = 9; for (int i = 0; i < 10; i++) v[i] = i + 1; for (int i = 0; i < 10; i++) swap(i, rand() % 10); } int Vec::get(int a) { return v[a]; } void Vec::put(int a, int value) { v[a] = value; } void Vec::swap(int a, int b) { int temp = v[a]; v[a] = v[b]; v[b] = temp; } void Vec::expand() { LEN = LEN * 2; int *p = new int[LEN]; for (int i = 0; i <= USED; i++) p[i] = v[i]; delete[] v; v = p; } void Vec::shrink() { LEN = LEN >> 1; int *p = new int[LEN]; for (int i = 0; i <= USED; i++) p[i] = v[i]; delete[] v; v = p; } int Vec::insert(int locate, int value) { if (locate < 0 || locate > USED) return 1; USED++; if (USED >= LEN) expand(); for (int i = USED; i > locate; i--) v[i] = v[i - 1]; v[locate] = value; return 0; } int Vec::del(int locate, int value) { if (locate < 0 || ((USED - value) < 0) || ((locate + value - 1) > USED)) return 1; USED = USED - value; for (int i = locate; i <= USED; i++) v[i] = v[i + value]; if (((double)USED / (double)LEN) <= 0.3) shrink(); return 0; } int Vec::find(int value) { int i = 0; for (i; i <= USED; i++) { if (v[i] == value) { return i; } } return -1; } int Vec::getlen() { return LEN; } int Vec::getused() { return USED; } void Vec::printall() { for (int i = 0; i < USED; i++) printf("%d\n", v[i]); } int main() { srand(time(NULL)); Vec v(10); int temp[10] = {0}; int flag; printf("初始化,输出数组\n"); v.printall(); while (1) { printf("选择操作:1.插入 2.删除 3.查找\n"); scanf("%d", &flag); switch (flag) { case 1: printf("输入秩与待插入数值\n"); scanf("%d %d", &temp[0], &temp[1]); (v.insert(temp[0], temp[1])) ? (printf("非法输入\n")) : (printf("输出数组\n")); v.printall(); break; case 2: printf("输入秩与待删除个数\n"); scanf("%d %d", &temp[0], &temp[1]); (v.del(temp[0], temp[1])) ? (printf("非法输入\n")) : (printf("输出数组\n")); v.printall(); break; case 3: printf("输入要查找的数值\n"); scanf("%d", &temp[0]); temp[2] = v.find(temp[0]); (temp[2] == -1) ? (printf("无此元素\n")) : (printf("秩为%d \n", temp[2])); break; default: printf("返回菜单\n"); } flag = 0; } return 0; }