[数据结构]你已经是个大人了,快来写顺序表吧

又到了 编故事 啊不讲故事的时间,还是那个菜鸡大学生。在高数和c语言的毒打之下,终于挺过了大一的上半学期。精通打退堂鼓这一门乐器的他知道,如果不继续往下学习。很可能他当程序员的理想就要夭折,遂,淦顺序表。

线性表

线性表是啥?

线性表(linear list)是n个具有 相同特性 的数据元素的有限序列。

常见的线性表有哪些?
顺序表、链表、栈、队列、字符串… 它们在之后的文章都会提到,今天我们主要讲顺序表。

注:线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

顺序表

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

简单来说就是一个高配的数组。

目标

  • 一个动态的顺序表
  • 实现基本的增删查改等接口函数

开工!

一点简单的准备工作

顺序表的本体(动态版本)

typedef int SLDataName;

typedef struct SeqList
{
   
	SLDataName* arr;  //指向动态开辟的数组
	size_t size;      //有效数据个数
	size_t capacity;  //容量
}SeqList;

初始化

int main()
{
   
	SeqList s;
	SeqListInit(&s);
}
  • 初始化可以防止顺序表里面的值不是奇奇怪怪的随机值,方便以后使用。
  • 这里取地址的原因:
    1. 我们一般推荐传址,万一这个结构体特别大,一拷贝压个栈,大家都别想活着。◇ヘ(;´Д`ヘ)纪念这里被夹的图片酱。◆
    2. 第二我们都知道函数里面的形参只是一份拷贝,形参改变是不影响实参的。
//顺序表初始化
void SeqListInit(SeqList* psl)
{
   
	psl->arr = (SeqList*)calloc(1, sizeof(SLDataName));
	psl->capacity = 1;
	psl->size = 0; 
}

这里的capacity也可以写成0,但是我为了方便接下来的扩容就没有这么写。

销毁

//顺序表销毁
void SeqListDestory(SeqList* psl)
{
   
	free(psl->arr);
	psl->arr = NULL;
	psl->capacity = 0;
	psl->size = 0;
}

不销毁的话会存在内存泄漏的问题。(虽然程序结束操作系统会帮你自动回收,但是我们不能养成这种坏习惯)

free的时候编译器才会检查指针是否越界。这时候报的错一般都是越界的问题。

销毁的函数很好写,全部都清空就完事了。

打印

//顺序表打印
void SeqListPrint(SeqList* psl)
{
   
	for (int i = 0; i 
  • 99
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 153
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Елена_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值