C_顺序表(动态数组插入)

介绍(本文仅作测试参考)

本文单独介绍顺序表(动态数组插入); 以便参考

(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");
}

运行结果(无)

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值