数据结构:复杂度,顺序表

今天开始学习数据结构,数据结构是计算机的核心课程之一,非常重要。

复杂度比较简单,我简单说一下。

看一个算法的好坏用的就是复杂度,而它又有两个时间复杂度和空间复杂度。

时间复杂度:这个不是算时间而是算次数。而在实际中,只需算出大概的次数,那么这里我们使用大O的渐进表示法。这就是取级数最高的即可。

空间复杂度:额外占用内存的大小,注意类似斐波那契数列这种,考虑深度,而不是一共调用多少次,这和二叉树的遍历相似,我们后面会说。

顺序表是比较简单的一种存储结构

void SeqListInit(SeqList* ps)
{
	ps->a = (SLDateType*)malloc(sizeof(SLDateType)*4);
	ps->size = 0;
	ps->capacity = 4;
}
void SeqListDestroy(SeqList* ps)
{
	ps->size = 0;
}
void CheckCapacity(SeqList* ps)
{
	ps->a = (SLDateType*)realloc(ps->a,sizeof(SLDateType) * 2 * (ps->capacity));
	if (ps->a == NULL)
		exit(-1);
	ps->capacity = ps->capacity * 2;
}
void SeqListPushBack(SeqList* ps, SLDateType x)
{
	if (ps->size == ps->capacity)
		CheckCapacity( ps);
	ps->a[ps->size] = x;
	ps->size++;
}
void SeqListPrint(SeqList* ps)
{
	int i;
	for (i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->a[i]);
	}
	printf("\n");
}
void SeqListPushFront(SeqList* ps, SLDateType x)
{
	int i;
	if (ps->size == ps->capacity)
		CheckCapacity(ps);
	for (i = ps->size; i > 0; i--)
	{
		ps->a[i] = ps->a[i - 1];
	}
	ps->a[0] = x;
	ps->size++;
}
void SeqListPopFront(SeqList* ps)
{
	int i;
	for (i = 1; i < ps->size; i++)
	{
		ps->a[i-1] = ps->a[i];
	}
	if(ps->size>0)
	    ps->size--;
	else
		printf("表空\n");


}
void SeqListPopBack(SeqList* ps)
{
	if (ps->size > 0)
		ps->size--;
	else
		printf("表空\n");
}
int SeqListFind(SeqList* ps, SLDateType x)
{
	int i;
	for (i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == x)
			return i + 1;
	}
	printf("不存在\n");
	return 0;


}
void SeqListInsert(SeqList* ps, int pos, SLDateType x)
{
	int i;
	if (ps->size == ps->capacity)
		CheckCapacity(ps);
	for (i = ps->size; i > pos-1; i--)
	{
		ps->a[i] = ps->a[i - 1];
	}
	ps->a[pos-1] = x;
	ps->size++;
}
void SeqListErase(SeqList* ps, int pos)
{
	int i;
	for (i = pos; i < ps->size; i++)
	{
		ps->a[i-1] = ps->a[i];
	}
	ps->size--;
}

这是动态顺序表的所有操作,静态顺序表在这里我就不赘述了,动态顺序表的有点很明显,它不会表满,因为当它满的时候会动态开辟空间。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是懒大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值