#ifndef DYNAMIC_ARR_H
#define DYNAMIC_ARR_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//实现动态增长,所以我们把它放在堆上
typedef struct DYNAMIN_ARRay {
int* addres;//存放数据的地址
int size;//当前有多少个元素
int capacity;//当前最大能容纳多少个元素
}Dynamic_ARRay;
//1.初始化,即创建
Dynamic_ARRay* Dynamic_ARRay_init();
//2.插入某个元素,往哪里插入,插入什么元素,所以形式参数如下
void Push_Back_Array(Dynamic_ARRay*arr, int value);
//3.删除某个元素,根据元素的位置
void Remove_Back_Array(Dynamic_ARRay*arr, int pos);
//4;删除某个元素,根据元素的值
void Removevalue_Array(Dynamic_ARRay*arr, int value);
//5.释放该顺序表的内存
void FreeArray_Array(Dynamic_ARRay*arr);
//6.打印出该顺序表的值
void Print_Array(Dynamic_ARRay* arr);
//7.查找出某个元素。根据值
int Find_Array(Dynamic_ARRay* arr, int value);
//8.清空顺序表
void Clear_Array(Dynamic_ARRay* arr);
//9.获取当前容量
int capacity_Array(Dynamic_ARRay* arr);
//10.根据某个位置获得某个元素
int Pos_Array(Dynamic_ARRay* arr, int pos);
//11。获取当前有多少个元素
int size_Array(Dynamic_ARRay*);
#endif
.c文件
//线性表分为2类,顺序表与链表,以下为顺序表的代码实现。
#define _CRT_SECURE_NO_WARNINGS
#include"DYNAMIC_ARR.h"
// 1.初始化,即创建
Dynamic_ARRay* Dynamic_ARRay_init(){
//开辟一片内存
Dynamic_ARRay* myarray = (Dynamic_ARRay*)malloc(sizeof(Dynamic_ARRay));
myarray->size = 0;
myarray->capacity = 20;;
myarray->addres = (int *)malloc(sizeof(int) * myarray->capacity);
return myarray;
}
/2.插入某个元素,尾部插入,插入什么元素,所以形式参数如下
void Push_Back_Array(Dynamic_ARRay * arr, int value)
{
if (arr == NULL) {
printf("指针出现问题");
return;
}
if (arr->size == arr->capacity) {
int* newspace = (int*)malloc(sizeof(int) * arr->capacity * 2);
memcpy(newspace, arr->addres, sizeof(int) * arr->capacity);
free(arr->addres);
arr->capacity = arr->capacity * 2;
arr->addres = newspace;
}
arr->addres[arr->size] = value;
arr->size++;
}
//3.删除某个元素,根据元素的位置
void Remove_Back_Array(Dynamic_ARRay * arr, int pos) {
if (arr == NULL) {
return ;
}
if (pos<0 || pos>=arr->size) {
printf("该位置不合法,无法删除该位置的元素");
return;
}
//覆盖该位置的元素就是删除了,其他位置的元素加加
for (int i = pos;i < arr->size;i++)
{
arr->addres[i] = arr->addres[i + 1];
}
arr->size--;
}
//4;删除某个元素,根据元素的值
void Removevalue_Array(Dynamic_ARRay* arr, int value) {
if (arr == NULL) {
return;
}
int pos = 0;//表示在那个位置发现了相同,打算调用上面的pos函数。
for (int i = 0;i < arr->size;i++) {
if (arr->addres[i] == value) {
pos = i;
break;
}
}
Remove_Back_Array(arr, pos);
arr->size--;
}
//5.释放该顺序表的内存
void FreeArray_Array(Dynamic_ARRay * arr) {
if (arr == NULL) {
return ;
}
if (arr->addres != NULL) {
free(arr->addres);
}
free(arr);
}
//6.打印出该顺序表的值
void Print_Array(Dynamic_ARRay * arr) {
for (int i = 0;i < arr->size;i++) {
printf("%d ", arr->addres[i]);
}
printf("\n");
}
nt Find_Array(Dynamic_ARRay* arr, int value) {
if (arr == NULL) {
return -1;
}
for (int i = 0;i < arr->size;i++) {
if (value = arr->addres[i])
return value;
else
printf("该顺序表不存在该元素,查询不到");
}
}
//8.清空顺序表
void Clear_Array(Dynamic_ARRay* arr) {
if (arr == NULL) {
return;
}
arr->size =0 ;
}
int capacity_Array(Dynamic_ARRay* arr)
{
if (arr == NULL){
return -1;
}
return arr->capacity;
}
//10.根据某个位置获得某个元素
int Pos_Array(Dynamic_ARRay* arr, int pos) {
if (arr == NULL) {
return -1;
}
return arr->addres[pos];
}
//11.获取当前元素的个数
int size_Array(Dynamic_ARRay*arr){
if (arr == NULL) {
return -1;
}
return arr->size;
}
.c测试文件
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"DYNAMIC_ARR.h"
void tese() {
Dynamic_ARRay * Myarray= Dynamic_ARRay_init();
printf("%d数组大小", capacity_Array(Myarray));
for (int i = 0;i < 30;i++) {
Push_Back_Array(Myarray, i);
}
printf("%d数组大小", capacity_Array(Myarray));
Print_Array(Myarray);
//Removevalue_Array(Myarray, 20);
Remove_Back_Array(Myarray,1);
Removevalue_Array(Myarray, 20);
Print_Array(Myarray);
FreeArray_Array(Myarray);
}
int main(void) {
tese();
system("pause");
return 0;
}