顺序表实现及基本操作(图解)

顺序表简介

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组
上完成数据的增删查改。
顺序表一般可以分为:

静态顺序表:使用定长数组存储。
位置大小确定,存放在结构体中.
在这里插入图片描述

#define N 10
typedef struct lists2{
   
	Data _data[N];
	size_t _size;
	size_t _capacity;
}lists2;

动态顺序表:使用动态开辟的数组存储。
结构体中仅存放数组的地址.
在这里插入图片描述

#include<stdio.h>
typedef int Data;
typedef struct lists{
   //顺序表数据类型
	Data* _data;//动态开辟所以只需知道数组的地址
	size_t _size;
	size_t _capacity;
}lists;

这里我们实现动态开辟的顺序表:

初始化和检查容量

void init(lists* list){
   //顺序表初始化
	list->_data = NULL;
	list->_capacity = list->_size = 0;
}
void checkcapacity(lists* list){
   
	if (list == NULL){
   
		return;
	}
	if (list->_capacity == list->_size){
   //有效元素=最大元素就满了
		int newcapacity = list->_capacity == 0 ? 1 : list->_capacity * 2;
		//如果_capacity=0说明是新链表,给1个空间,不是的话开2倍

		//可以用realloc代表下面的(free)外3行		
		//list->_data = (Data*)realloc(list->_data, sizeof(Data)*newcapacity);
		
		Data* newdata = (Data*)malloc(sizeof(Data)*newcapacity);
		//修改动态开辟的data类型的大小
		memcpy(newdata, list->_data, sizeof(Data)*list->_size);
		//将有效地数据放入新的数据
		free(list->_data);
		list->_data = newdata;
		list->_capacity = newcapacity;
	}
}

基本操作

尾插和尾删

//尾插
void weicha(lists* list,Data data){
   
	checkcapacity(list);
	list->_data[list->_size] = data;
	++list->_size;
}

在这里插入图片描述

//尾删
void weishan(lists* list){
   
	if (list == NULL||list->_size==0){
   
		return;
	}
	if (list->_size > 0){
   
		list->_size
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
顺序表基本操作包括初始化、插入元素、删除元素、查找元素和修改元素等。 1. 初始化操作: 可以通过以下步骤来初始化一个顺序表: - 声明一个顺序表结构体,包括一个指向存储空间的指针和记录元素个数的变量。 - 使用动态内存分配函数分配一定大小的存储空间,并将其地址赋值给顺序表结构体中的指针变量。 - 将记录元素个数的变量初始化为0,表示顺序表为空。 2. 插入元素操作: 在顺序表中插入元素可以通过以下步骤实现: - 判断顺序表是否已满,如果已满则无法插入新元素。 - 在待插入位置之后的元素依次后移,为新元素腾出位置。 - 将待插入元素放入腾出的位置,并将顺序表的元素个数加1。 3. 删除元素操作: 在顺序表中删除元素可以通过以下步骤实现: - 判断顺序表是否为空,如果为空则无法删除元素。 - 根据给定的元素值或索引找到待删除元素的位置。 - 将待删除位置之后的元素依次前移,覆盖待删除元素。 - 将顺序表的元素个数减1。 4. 查找元素操作: 在顺序表中查找元素可以通过以下步骤实现: - 从顺序表的第一个元素开始逐个比较,直到找到匹配的元素或遍历完整个顺序表。 - 如果找到匹配的元素,返回其位置或索引;如果遍历完整个顺序表仍未找到匹配的元素,则返回查找失败的标志。 5. 修改元素操作: 在顺序表中修改元素可以通过以下步骤实现: - 根据给定的元素值或索引找到待修改元素的位置。 - 将待修改位置的元素值更新为新值。 需要注意的是,顺序表的插入和删除操作可能会导致内存的重新分配和大量元素的移动,因此在频繁执行这些操作时,可能会降低性能。另外,顺序表的长度是固定的,无法自由扩充,如果需要更灵活的数据结构,可以考虑链表等其他存储形式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值