介绍(本文仅作测试参考)
本文单独介绍顺序表(动态数组插入); 以便参考
(1)使用方法:指针指向 = (类型)malloc(分配大小)函数 进行分配内存
(2)使用方法:(类型)realloc(动态数组名,分配大小)函数 重新分配内存
动态数组解释
动态数组优缺点
- 缺点:
1、如果有一个数据 插入 重新申请内存 所有数据都要移动一次
2、插入删除不便
3、需要主动释放内存
4、申请大的空间可能会申请失败- 优点:
1、大小不固定,可以灵活扩展
源码
#include<stdio.h>
#include<stdlib.h>
struct LIST
{
int *arr;//通过指针管理内存,动态数组
int size;//数组大小
int len;//数组的元素个数
};
//初始化数组大小
void Init_Size(LIST *p,int size)
{
p->size = size > 1 ? size : 1;//设置初始大小
p->len = 0;
p->arr = (int*)malloc(sizeof(int)*p->size);
}
void Insert_Size(LIST *p, int data)
{
if (p->len < p->size)//判断内存是否足够
{
p->arr[p->len++] = data;//当内存足够时直接插入末尾
}
else //内存不足时;扩充内存
{
/***************************************************************
代码解释:p->size >> 1>1 ? p->size >> 1 : 1;
代码作用:size/2 > 1 ? size/2 : 1; //PS:采用的三目运算符
(1)如果大于 1 则获取size原先的一半值
(2)如果小于则获取 1;
***************************************************************/
p->size = p->size + p->size >> 1>1 ? p->size >> 1 : 1;//设置新内存;(PS:在原有的内存基础上"加一半"或者"加一")
p->arr = (int*)realloc(p->arr, p->size*sizeof(int));//重新分配内存
p->arr[p->len++] = data;//插入数据
}
}
void main()
{
LIST list;
Init_Size(&list, 10);//初始化内存大小
Insert_Size(&list, 31);//插入内容
free(list.arr);//释放内存
system("pause");
}