数据结构中的顺序表的删除和查找

发布于:2024-04-15 ⋅ 阅读:(171) ⋅ 点赞:(0)
  • 对于顺序表,它包括:初始化,取值,查找,插入,以及删除。接下来就讲一讲删除和查找。

  • 删除:它包括头删和尾删,为什么顺序表中要用到删除呢?按我的理解就是:为插入做准备的。如果不逍遥这个数就可以通过删除轻而易举的就删除掉了,如果想插入一个数,只需要删除那个数就可以插入进去了。

  • 头删:代码:
    //头删
    void SLPopFront(SL* ps)
    {
    	assert(ps);
    	assert(ps->size);
    
    	//数据整体往前挪动一位
    	//for循环
    	
    	for (int i = 0; i < ps->size - 1; i++)
    	{
    		ps->arr[i] = ps->arr[i + 1];
    	}
    	ps->size--;

    for循环是为了向前挪动一位的。ps->size--,就是数据个数减一。

  • 尾删:代码:

    //尾删
    
    void SLPopBack(SL* ps)
    {
    	assert(ps);
    	assert(ps->size);
    	//顺序表不能为空
    	--ps->size;
    }

    尾删就相对简单一点,

  • 头删,尾删都写好以后,那就是指定位置之前插入/删除数据,头两个只是随意删除的,而在指定位置之前插入/删除数据,就是对顺序表有利的代码:

    //在指定位置之前插入数据
    void SLInsert(SL * ps, int pos, SLDataType x)
    {
    	assert(ps);
    	assert(pos >= 0 && pos <= ps->size);
    	//插入数据:空间够不够
    	SLCheckCapacity(ps);
    	//让pos及以后的数据整体往后挪动一位
    	for (int i = ps->size; i > pos; i--)
    	{
    		ps->arr[i] = ps->arr[i - 1];
    	}
    	ps->arr[pos] = x;
    	ps->size++;
    }

    在指定位置之前插入数据,要确保内存空间够不够。

  • 删除指定位置的数据:我们直接上代码为://删除指定位置的数据:
//删除指定位置的数据
void SLErase(SL* ps, int pos)
{
	assert(ps);
	assert(pos >= 0 && pos <= ps->size);
	for (int i = pos; i < ps->size; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size++;
}

  • 查找数据:这就比较好写了,则代码为:
    //查找
    int SLFind(SL* ps, SLDataType x)
    {
    	assert(ps);
    	for (int i = pos; i < ps->size; i++)
    	{
    		if (ps->arr[i] == x)
    		{
    			//找到了
    			return 1;
    		}
    	}
    
    	//没有找到
    	return -1;
    
    }
    
    

    对于查找,只需要知道x在哪个位置,然后用for循环就可以了。

  • 对于顺序表,就是这么多的知识点。只要知道它的逻辑结构就可以了。如果你想看所有的代码,可以访问我的gitte哦

我的gitte是

(anhuijiangkun) - Gitee.comicon-default.png?t=N7T8https://gitee.com/anhuijiangkun


网站公告

今日签到

点亮在社区的每一天
去签到