视觉组第一次培训作业
代码仅供参考
用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.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使用以下模板
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) { }
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));
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内存管理