数据结构-顺序表的基本操作(c语言实现)

1.初始化

void SeqListInit(SeqList*pq)
{
	assert(pq);
	pq->a = (int*)malloc(sizeof(int) * 4);//申请4个大小为int的空间
	if (pq->a == NULL)
	{
		printf("Failed to open up space");
	}
	for (int i = 0; i < 4; i++)
	{
		pq->a[i] = i;
	}//随便赋值了数值0 1 2 3 
	pq->size = 4;
	pq->capacity = 4;
}

2.插入操作(增)

void SeqListInsert(SeqList*pq, int pos, DateType x)
{
	assert(pq);
	assert(pos >= 0 && pos <= pq->size);
	if (pq->size == pq->capacity)//判断实际储存的数据的个数与空间的大小是否相等,如果相等就进行扩容
	{
		int n = (pq)->capacity * 2;
		int*new = (int*)realloc(pq->a, sizeof(int)*n);
		if (new == NULL)
		{
			printf("Capacity expansion failed");
		}
		(pq)->a = new;
		(pq)->capacity = n;
	}
	int end = pq->size;
	for (end; end > pos; --end)
	{
		pq->a[end] = pq->a[end - 1];
	}
	pq->a[pos] = x;
	++pq->size;

顺序表的缺点:空间不够的时候,需要扩容,有一定的性能,也有可能带来空间的浪费。

3.删除数据(删)

void SeqListErase(SeqList*pq, int pos)
{
	assert(pq);
	assert(pos >= 0 && pos < pq->size);
	int cur = pos;//定义变量current
	for (cur; cur < pq->size - 1; ++cur)
	{
		pq->a[cur] = pq->a[cur + 1];
	}
	--pq->size;
}

4.查找数据(查)

int SeqListFind(SeqList*pq, DateType x)
{
    assert(pq);
    for (int i = 0; i < pq->size; i++)
    {
        if (pq->a[i] == x)
        {
            return i;
        }
    }
    return -1;//找到了就返回角标,没有找到就返回-1
} 

顺序表的优点:按照下标可以随机访问。

5.修改数据 (改)

void SeqListModify(SeqList*pq, int pos, DateType x)
{
	assert(pq);
	assert(pos >= 0 && pos < pq->size);
	pq->a[pos] = x;
}

6. 释放空间

void SeqListDestory(SeqList*pq)
{
	assert(pq);
	free(pq->a);
	pq->a = NULL;
	pq->capacity = pq->size = 0;
}

因为申请了空间,一定要对空间进行释放,不然会导致内存泄漏的问题。

7.打印

void Print(SeqList*pq)
{
	int i = 0;
	for (i = 0; i < pq->size; i++)
	{
		printf("%d", pq->a[i]);
	}
}

打印的目的还是测试各个接口。

8.测试

    SeqList s;
	SeqListInit(&s);//初始化
	Print(&s);
	printf("\n");
    SeqListInsert(&s, 1, 4);//插入一个数据4
	Print(&s);
	printf("\n");
	SeqListErase(&s, 1);//删除数据
	Print(&s);
	printf("\n");
	SeqListFind(&s, 1, 1);//查找数据
	printf("%3d", SeqListFind(&s, 1, 1));
	printf("\n");
	SeqListModify(&s, 2, 2);//改变数据
	Print(&s);
	printf("\n");
	SeqListDestory(&s);

测试结果:

数据结构-顺序表的基本操作(c语言实现)_第1张图片 

增删查改的接口实现就总结到这里了,感谢你的浏览。如果感兴趣的话,可以给个关注,数据结构-顺序表的基本操作(c语言实现)_第2张图片下期将发布与链表相关的基本操作文章。

 

 

 

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