属于自己的数组 (动态)
程序员成长之旅 · 程序员成长之旅/C语言/自己写的源码 · 415 字
#include<stdio.h>
#include<stdlib.h>
int* data;
int lenght = 0;
int size = 0;
int* strArr(void)
{
if ((data = (int*)malloc(sizeof(int) * 10)) == NULL) {//防止出现内存申请失败
return -1;
}
lenght = 10;
return data;
}
int resize(int newCapacity)
{ //实现思路 创建一个动态数组 >把数据导入进动态数组>释放原有动态数组>指向新动态数组>释放临时数组指针>更正数组长度
int* newData;
if ((newData = (int*)malloc(sizeof(int)*newCapacity)) == NULL) {
return -1;
}
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
free(data);
data = newData;
newData = NULL;
lenght = newCapacity;
}
int addArr(int serial, int Num)
{
if (serial > size || serial < 0)//防止输入非法数据
return 233;
if (size == lenght) {//如果申请数据位置等于最大数组长度>启动扩容
resize(lenght * 2);
}
for (int i = size - 1; i >= serial; i--) {
data[i + 1] = data[i];
}
data[serial] = Num;
size++;
}
void addArrEnd(int Num)
{
addArr(size, Num);
}
void addArrFirst(int Num)
{
addArr(0, Num);
}
void printAll(void)
{
printf("The size is[%d] lenght is [%d]\n", size, lenght);
for (int i = 0; i < size; i++)
printf("%d\t", data[i]);
printf("\n");
}
int get(int serial) {
if (serial > size || serial < 0)
return 233;
return data[serial];
}
void set(int serial, int Num)
{
if (serial > size || serial < 0)
return 233;
data[serial] = Num;
}
_Bool contains(int Num)
{
for (int i = 0; i < size; i++)
if (data[i] == Num)
return 1;
return 0;
}
int find(int Num)
{
for (int i = 0; i < size; i++)
if (data[i] == Num)
return i;
return -1;
}
int del(int serial)
{
if (serial > size || serial < 0)
return 233;
if (size <= lenght / 4) {//如果数据删的只剩原有数组的四分之一>启动缩容
resize(lenght / 2);
}
int lastNum = data[serial];
for (int i = serial + 1; i < size; i++) {
data[i - 1] = data[i];
}
size--;
return lastNum;
}
int delFirst(void)
{
return del(0);
}
int delLast(void)
{
return del(size - 1);
}
_Bool delFind(int Num)
{
int serial;
if ((serial = find(Num)) != -1) {
del(serial);
return 1;
}
return 0;
}
int main()
{
strArr();
for (int i = 0; i < 99999999; i++) {
addArrEnd(i);
}
printAll();
for (int i = 0; i < 850; i++) {
delLast();
}
printAll();
return 0;
}