数据结构之“顺序表”

这一章节的内容是顺序表,加油!!

划重点:编写代码过程中要勤测试,避免写出大量代码后再测试而导致出现问题,问题定位无从下手。

一.线性表

线性表中包含着顺序表(线性表:顺序表,链表…)。所以在说顺序表之前,我们需要先了解一下线性表。

线性表:是n个具有 相同特性的数据元素 的有限序列,(是一种在实际中广泛使用的数据结构),常见的线性表:顺序表、链表、栈、队列、字符串…

相同特性从两个维度来分析:物理结构 和 逻辑机构

物理结构(数据在内存上的存储形式):不一定线性
逻辑结构(人为想象出来的数据的组织形式):都是线性的!!!

二. 顺序表

逻辑结构:线性的
物理结构(这个由顺序表的底层结构决定):线性的

顺序表的底层结构是?

顺序表是 (用一段物理地址连续的存储单元) 依次 (存储数据元素) 的 (线性结构),一般情况下采用数组存储。
由此可知,顺序表的底层结构是数组

顺序表和数组的区别?

顺序表的底层结构是数组,是对数组的封装,实现了常用的增删改查等接口。
(而对数组进行封装,会用到结构体)

1. 静态顺序表

定义之前已经知道数组的大小,直接int arr[3]={4,5,6};

已知数组大小和顺序表大小:静态顺序表

struct SeqList {
   
	int arr[100];
	int size; //顺序表中有效数据的个数
};

但是数组里还可以存储其它类型的数据,比如字符。如果之后需求发生变更,全部修改:ctrl+h(但我们只想修改特定的那部分)。一个一个改又很繁琐,这时我们可以用typedef一键替换想要修改的位置。

typedef int SLDataType

2. 动态顺序表

定义之前不知道数组的大小,我们可以用动态内存管理,来创建动态内存顺序表。而且动态顺序表可以增容。

struct SeqList {
   
	int* arr; //数组的指针
	          //之后再为指针指向的空间去申请空间malloc,calloc(初始化),之后想扩容的话用realloc
	int capacity; //顺序表空间大小
	              //空间大小可以修改,实时可能会变化,所以需要一个值来保存顺序表空间大小
	int size;  //有效数据的个数
};

3. 动态顺序表的简单使用说明

先在VS上新创建两个源文件和一个头文件。

在这里插入图片描述

在这里插入图片描述

  1. SeqList.h相当于目录。
    在目录里,有定义,初始化,销毁动态顺序表。
    包含头文件#include<stdio.h>
  2. SeqList.c是用来写实现的具体方法
    在SeqList.c里需要包含头文件,#include"SeqList.h",stdio.h那个不用再写,它就在SeqList.h里,已经被包含进去了
  3. test.c也要记得包含头文件#include<stdio.h>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.每次写struct SeqList很麻烦,可以定义为:typedef struct SeqList SL;(第二种方式在代码中体现)

//定义动态顺序表结构
typedef int SLDataType;
typedef struct SeqList {
   
	SLDataType* arr;
	int capacity; //不需要修改int,空间大小本来就是整数
	int size;  //有效数据个数不修改
}SL;

5.初始化动态顺序表(传址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值