205 lines
No EOL
2.8 KiB
C++
205 lines
No EOL
2.8 KiB
C++
#include <stdio.h>
|
|
#include <iostream>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
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;
|
|
} |