1
0
forked from 131/lab5_ivec

add vector.c template, update makefile, add readme.txt

This commit is contained in:
dzruyk
2022-04-16 03:24:45 +03:00
parent b3fa16be00
commit 3904906621
5 changed files with 196 additions and 0 deletions

32
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,32 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/vector_test",
"args": ["--no-fork"],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}

14
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,14 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: gcc build",
"command": "make",
"problemMatcher": [
"$gcc"
],
"group": "build",
}
]
}

View File

@@ -9,3 +9,6 @@ vector_test: util.o vector.o vector_test.o $(unittest_obj)
clean:
rm vector_test $(unittest_obj) *.o
test: vector_test
./vector_test

34
README.txt Normal file
View File

@@ -0,0 +1,34 @@
Базовые структуры данных
------------------------
* Склонировать репозиторий https://timp.pw/121/lab4_ivec.git
(если репозиторий уже склонирован -- пропустить этот шаг ^_^)
В этом задании мы должны реализовать вектор для типа int.
Вектор -- это динамический массив данных, который может менять свой размер
в процессе работы.
Описание структуры данных ivector в файле vector.h
Вам необходимо реализовать некоторые функции в файле ./vector.c
и пройти тесты (описанные в ./vector_test.c).
Команда для сборки проекта -- make
Команда для запуска тестов -- make test
Необходимо реализовать следующие функции
vector_len
vector_data
vector_resize
vector_initdata
vector_set
vector_get
vector_push
vector_pop
(Опционально, но очень желательно)
vector_insert
vector_del

113
vector.c Normal file
View File

@@ -0,0 +1,113 @@
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vector.h"
#include "util.h"
#define VECTOR_START_SIZE 8
#define VECTOR_GROW_FACTOR 2
#define ITEMSZ sizeof(int)
void
vector_init(ivector *v)
{
assert(v);
v->n = 0;
v->maxsz = VECTOR_START_SIZE;
v->data = xmalloc(ITEMSZ * VECTOR_START_SIZE);
}
void
vector_initdata(ivector *v, int *arr, size_t arrsz)
{
assert(v && arrsz);
// <YOURCODE>
}
void
vector_free(ivector *v)
{
assert(v);
v->n = 0;
v->maxsz = 0;
xfree(v->data);
v->data = NULL;
}
size_t
vector_len(const ivector *v)
{
assert(v);
// <YOURCODE>
return 0;
}
int *
vector_data(const ivector *v)
{
assert(v);
// <YOURCODE>
return NULL;
}
void
vector_resize(ivector *v, int n)
{
assert(v);
// <YOURCODE>
}
void
vector_set(ivector *v, size_t idx, int val)
{
assert(v && idx < v->n);
// <YOURCODE>
}
int
vector_get(const ivector *v, size_t idx)
{
assert(v && idx < v->n);
// <YOURCODE>
return 0;
}
void
vector_push(ivector *v, int val)
{
assert(v);
// <YOURCODE>
}
void
vector_pop(ivector *v)
{
assert(v);
// <YOURCODE>
}
void
vector_insert(ivector *v, size_t idx, int val)
{
assert(v && v->n >= idx);
// <YOURCODE>
}
void
vector_del(ivector *v, size_t idx)
{
// <YOURCODE>
}
void
vector_clear(ivector *v)
{
vector_resize(v, 0);
}