动态数组
[C++]STL-vector容器(动态数组)
头文件:DynamicArray.h
#ifndef DYNAMIC_ARRAY_H
#define DYNAMIC_ARRAY_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct DYNAMICARRAY {
int* pAddr;
int size;
int capacity;
}DYNAMIC_ARRAY;
DYNAMIC_ARRAY* DYNAMIC_ARRAY_INIT();
void Push_Back_Array(DYNAMIC_ARRAY*,int);
void RemoveByPos_Array(DYNAMIC_ARRAY*, int);
void RemoveByVal_Array(DYNAMIC_ARRAY*, int);
int Find_Array(DYNAMIC_ARRAY*, int);
void Print_Array(DYNAMIC_ARRAY*);
int Capacity_Array(DYNAMIC_ARRAY*);
int Size_Array(DYNAMIC_ARRAY*);
int At_Arrray(DYNAMIC_ARRAY*,int);
void FreeSpace_Array(DYNAMIC_ARRAY*);
void Clear_Array(DYNAMIC_ARRAY*);
#endif DYNAMIC_ARRAY_H
实现文件:DynamicArray.c
#include"DynamicArray.h"
#define CAPACITY 20
DYNAMIC_ARRAY* DYNAMIC_ARRAY_INIT() {
DYNAMIC_ARRAY* myarray = (DYNAMIC_ARRAY*)malloc(sizeof(DYNAMIC_ARRAY));
myarray->size = 0;
myarray->capacity = CAPACITY;
myarray->pAddr =(int*) malloc(sizeof(int) * CAPACITY);
return myarray;
}
void Push_Back_Array(DYNAMIC_ARRAY* arr, int val) {
if (arr == NULL) {
return;
}
if (arr->size == arr->capacity) {
int* newSpace = (int*)malloc(sizeof(int) * arr->capacity * 2);
memcpy(newSpace, arr->pAddr, arr->capacity * sizeof(int));
free(arr->pAddr);
arr->capacity *= 2;
arr->pAddr = newSpace;
}
arr->pAddr[arr->size] = val;
arr->size ++;
}
void RemoveByPos_Array(DYNAMIC_ARRAY* arr, int pos) {
if (arr == NULL) {
return;
}
if (pos < 0 || pos >= arr->size) {
return;
}
for (int i = pos; i < arr->size-1; i++) {
arr->pAddr[i] = arr->pAddr[i + 1];
}
arr->size--;
}
void RemoveByVal_Array(DYNAMIC_ARRAY* arr, int val) {
if (arr == NULL) {
return;
}
int pos = Find_Array(arr, val);
RemoveByPos_Array(arr, pos);
}
int Find_Array(DYNAMIC_ARRAY* arr, int val) {
if (arr == NULL) {
return -1;
}
for (int i = 0; i < arr->size; i++) {
if (arr->pAddr[i] == val) {
return i;
}
}
return -1;
}
void Print_Array(DYNAMIC_ARRAY* arr) {
for (int i = 0; i < arr->size; i++) {
printf("%d ", arr->pAddr[i]);
}
printf("\n");
}
int Capacity_Array(DYNAMIC_ARRAY* arr) {
if (arr == NULL) {
return -1;
}
return arr->capacity;
}
int Size_Array(DYNAMIC_ARRAY* arr) {
if (arr == NULL) {
return -1;
}
return arr->size;
}
int At_Arrray(DYNAMIC_ARRAY* arr, int pos) {
return arr->pAddr[pos];
}
void FreeSpace_Array(DYNAMIC_ARRAY* arr) {
if (arr == NULL) {
return;
}
if (arr->pAddr != NULL) {
free(arr->pAddr);
}
free(arr);
}
void Clear_Array(DYNAMIC_ARRAY* arr) {
if (arr == NULL) {
return;
}
arr->size = 0;
}
主文件:Main.c
void DynamicArrayTest() {
DYNAMIC_ARRAY* myarray = DYNAMIC_ARRAY_INIT();
printf("初始化后容量为:%d\n元素个数为:%d\n", myarray->capacity,myarray->size);
for (int i = 0; i < 30; i++) {
Push_Back_Array(myarray, i);
}
printf("插入元素后容量为:%d\n元素个数为:%d\n", myarray->capacity, myarray->size);
RemoveByPos_Array(myarray, 5);
RemoveByVal_Array(myarray, 25);
int pos=Find_Array(myarray, 17);
printf("%d位于:%d \n", At_Arrray(myarray, pos),pos);
Print_Array(myarray);
FreeSpace_Array(myarray);
}
int main(){
DynamicArrayTest();
system("pause");
return 0;
}