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

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

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

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

时间复杂度:这个不是算时间而是算次数。而在实际中,只需算出大概的次数,那么这里我们使用大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--;
}

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

你可能感兴趣的:(数据结构,c语言)