선형 표 - 동적 배열

4979 단어 데이터 구조
동적 배열 은 STL 의 vector 의 일부 기능 을 모방 합 니 다.
main.c
#include 
#include "DynamicArray.h"

int main()
{
	Dynamic_Array *arr=Array_Init();
	printf("    Capcapity: %d
", Capacity_Array(arr)); printf(" size:%d
", Size_Array(arr)); // for (int i = 0; i < 30; i++) { Push_Back(arr, i); } printf(" :Capcapity : %d
", Capacity_Array(arr)); printf(" size:%d
", Size_Array(arr)); printf("
"); printf("
"); Print_Array(arr); // int n = Remove_Array(arr, 3); if (n==1) // { printf("
"); } else if (n==-1) { printf("
"); } printf("
"); Print_Array(arr); printf("
"); // n = Remove_Array_Value(arr, 5); if (n==1) { printf("
"); } else if (n==-1) { printf("
"); } printf("
"); Print_Array(arr); printf("
"); n = Find_Array(arr, 3); if (n >0) { printf(" , %d
",n); } else if (n == -1) { printf("
"); } printf("
"); Get_Array(arr, 6); // Clear_Array(arr); printf("Capcapity : %d
", Capacity_Array(arr)); printf("size:%d
", Size_Array(arr)); Free_Array(arr); return 0; }

DynamicArray.h
#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H
#include 
#include 

//      
//  capacity                   
//size  ,            

typedef struct DynamicArray
{
	int *pAddr; //       
	int size;  //      
	int capacity; //   ,              
}Dynamic_Array;

//               
//   
Dynamic_Array * Array_Init();
//  
void Push_Back(Dynamic_Array *arr, int val);
//      
int Remove_Array(Dynamic_Array *arr, int pos);
//     
int Remove_Array_Value(Dynamic_Array *arr, int value);
//           
int Find_Array(Dynamic_Array *arr, int value);
//            
void Get_Array(Dynamic_Array *arr, int pos);
//        
int Capacity_Array(Dynamic_Array*arr);
//            
int Size_Array(Dynamic_Array *arr);
//    
void Print_Array(Dynamic_Array *arr);
//         
void Free_Array(Dynamic_Array *arr);
//    
void Clear_Array(Dynamic_Array *arr);
#endif

DynamicArray.c
#include "DynamicArray.h"

//   
Dynamic_Array * Array_Init()
{
	Dynamic_Array *MyArray = (Dynamic_Array*)malloc(sizeof(Dynamic_Array));
	MyArray->size = 0;
	MyArray->capacity = 20;
	MyArray->pAddr = (int *)malloc(sizeof(int)*MyArray->capacity);
	return MyArray;
}
//  
void Push_Back(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)); //      ,   *sizeof(int)
		free(arr->pAddr);
		arr->pAddr = NULL;
		//    
		arr->capacity = arr->capacity * 2;
		//      
		arr->pAddr = newSpace;
	}

	//     
	arr->pAddr[arr->size] = val;
	arr->size++;

}
//      
int Remove_Array(Dynamic_Array *arr, int pos)
{
	if (arr->pAddr == NULL)
		return -1;
	if (pos<0||pos > arr->size)
	{
		return -1;
	}
	else
	{
		for (int i = pos; i < arr->size; i++)
		{
			arr->pAddr[i - 1] = arr->pAddr[i];
		}
		arr->size--;
		return 1;
	}
}
//                 
int Remove_Array_Value(Dynamic_Array *arr, int value)
{
	if (arr->pAddr == NULL)
		return -1;
	//      
	int n=Find_Array(arr, value);
	if (n == -1)
	{
		return n;
	}
	else
	{
		Remove_Array(arr, n);
	}
}
//         
int Find_Array(Dynamic_Array *arr, int value)
{
	if (arr->pAddr == NULL)
		return -1;
	int i;
	for ( i = 0; i < arr->size; i++)
	{
		if (arr->pAddr[i] == value)
		{
			return i + 1;
			break;
		}
	}
	if (i == arr->size)
	{
		return -1;
	}
}
//  
void Print_Array(Dynamic_Array *arr)
{
	if (arr->pAddr == NULL)
		return;
	for (int i = 0; i < arr->size; i++)
	{
		printf("%d  ", arr->pAddr[i]);
	}
	printf("
"); } // void Free_Array(Dynamic_Array *arr) { if (arr->pAddr == NULL) return; if (arr->pAddr != NULL) { free(arr->pAddr); arr->pAddr == NULL; } free(arr); arr = NULL; } // void Clear_Array(Dynamic_Array *arr) { if (arr->pAddr == NULL) return; arr->size = 0; } // int Capacity_Array(Dynamic_Array*arr) { if (arr->pAddr == NULL) return; return arr->capacity; } // int Size_Array(Dynamic_Array *arr) { if (arr->pAddr == NULL) return; return arr->size; } // void Get_Array(Dynamic_Array *arr, int pos) { if (arr->pAddr == NULL) return; if (pos >= arr->size) { printf("
"); } else { printf(" , %d
", arr->pAddr[pos-1]); } }

좋은 웹페이지 즐겨찾기