SRM

搏至无憾 鲨向巅峰

视觉组第一次培训作业

视觉组第一次培训作业

代码仅供参考

用C语言实现动态数组类Vector,实现以下功能:

  • ctor():创建⼀个空的动态数组
  • dtor():销毁这个动态数组
  • getsize():返回动态数组的元素个数。
  • empty():判断动态数组是否为空,为空则返回 true,否则返回 false。
  • at(index):返回动态数组中指定索引位置 index 的元素,如果越界,则返回-1。
  • push(item):将元素 item 添加到动态数组的末尾。
  • pop():删除动态数组末尾的元素,并返回该元素,若数组为空则返回-1,并且不执⾏这次操作

ps

  • 以上函数只是对功能的简要表示,函数具体的返回类型以及参数列表请自行思考实现
  • 分文件编写 main.c vector.h vector.c

vector结构示意图

vector


vector.h使用以下模板

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>

typedef struct Vector {
int *data; // 动态数组
int size; // 当前元素个数
int capacity; // 数组的容量

// 功能函数

}Vector;

// 功能函数声明

ps:C语言struct中无法添加函数,思考其等效实现,并通过代码自行实现


vector.c使用以下模板

1
// 功能函数具体定义

main.c使用以下模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include "vector.h"

void vector_set_funcs(Vector *vector)
{
// 初始化Vector,与向C语言struct中添加函数的等效实现有关
// 自行实现
}

int main(){
Vector vec;
vector_set_funcs(&vec);
vec.ctor(&vec);
for(int i = 0; i < 20; i++)
vec.push(&vec,i);
printf("%d\n", vec.getsize(&vec));

// 请实现:输出当前 array 内的所有元素(以空格隔开),输出完毕后换行

printf("\n");

for(int i = 0; i < 30; i++){
int x = vec.pop(&vec);
if (~x)
printf("Pop: %d\n", x);
else
printf("Vector Empty\n");
}
printf("%d\n", vec.at(&vec,20));
vec.empty(&vec) ? puts("Yes") : puts("No");
vec.dtor(&vec);
return 0;
}

作业提交

main.c vector.h vector.c 打包压缩为 姓名-组别-0716.zip 以邮件形式发送至 linzitao1379@gmail.com
提交截至时间 7.18 24:00


参考文档

C内存管理