顺序表基本操作实现(详细)

1.顺序表的概念

顺序表分为1.静态顺序表 2.动态顺序表

  • 顺序结构------将表中元素一个一个的存入一组连续的存储单元中
  • 顺序表--------采用顺序结构的线性表

2. 熟悉顺序表的分类?

静态顺序表和动态顺序表的区别?

  • 相同点:内存连续,数据顺序存储
  • 不同点:所占内存空间位置不同,静态是在函数栈上,随着函数调用的结束自动被系统收回,而 动态顺序表所占内存空间在堆的内存上,不会随着函数的结束而被释放,需要用户主动去释放;

3.熟悉顺序表的优缺点

静态顺序表:操作简单,不需要用户主动去释放,所以也就不存在内存泄露;
动态顺序表:可以动态开辟内存空间,操作灵活,避免造成资源浪费;

4.动态顺序表的基本操作

4.0包含头文件和结构体

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//1. 熟悉顺序表的概念
//2. 熟悉顺序表的分类?静态顺序表和动态顺序表的区别?
//3. 实现动态顺序表的以下基本操作:
typedef int DataType;

typedef struct SeqList
{
   
	DataType* _array; // 保存顺序表中有效元素个数 
	int _capacity; // 空间总大小 
	int _size; // 有效元素个数 
}	SeqList,*PSeqList;

4.1初始化,销毁,扩容

//初始化顺序表
void SeqListInit(PSeqList ps)
{
   
	assert(ps != NULL);
	ps->_capacity = 10;//容量
	//开辟空间
	ps->_array = (int*)malloc(sizeof(DataType)*ps->_capacity);
	//size为有效个数,所以起初为0
	ps->_size = 0;
}

void SeqListDestroy(PSeqList ps)
{
   
	assert(ps != NULL);
	assert(ps->_array != NULL);	
	free(ps->_array);
	ps->_array = NULL;
	ps->_capacity = 0;
	ps->_size = 0;
}

void SeqListCheck(PSeqList ps)//扩容
{
   
	if (ps->_capacity > ps->_size)
	{
   
		return;
	}

	int newcapacity = 2 * ps->_capacity; 
	DataType* new_array = (int*)malloc(sizeof(DataType)*newcapacity);
	for (int i = 0; i < ps->_size; ++i)
	{
   
		new_array[i] = ps->_array[i];
	}

	ps->_capacity = newcapacity;
	ps->_array = new_array;
}

4.2尾插,尾删,头插,头删

// 尾插 
void SeqListPushBack(PSeqList ps, DataType data)
{
   
	SeqListCheck(ps);//扩容
	ps->_array[ps->_size] = data;
	ps->_size++;
}
// 尾删 
vo
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序猿的温柔香

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

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

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

打赏作者

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

抵扣说明:

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

余额充值