当前位置: 首页 > article >正文

数据结构之二:表

顺序表代码:SData/SqList/SeqList.h · Hera_Yc/bit_C_学习 - 码云 - 开源中国

链表相关代码:SData/ListLink/main.c · Hera_Yc/bit_C_学习 - 码云 - 开源中国

本文主要讲解的是线性表(逻辑线性),对于非线性表不做补充。

线性表

线性表是n个具有相同类型的数据元素的有限序列。

        线性表是在逻辑上是线性结构,但在物理(内存上)不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

 顺序表

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

  • 静态顺序表:使用定长数组存储元素。
  • 动态顺序表:动态顺序表能够增容,对空间的利用率必静态数组高。
顺序表接口实现:
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//顺序表,有效数据中必须是连续存储
// 
//静态数据表(固定大小)
// 把数组简单封装一下
//
// 动态数据表
// malloc开辟内存
//


typedef int SLDataType;
#define N 10
#define INC_N  N

typedef struct SeqList
{
	SLDataType* arr; 
	int size;		//有效数据的个数
	int capacity;	//容量
}SL,SeqList;

void SeqListInit(SL* s);


//尾插
void SeqListPushBack( SeqList* ps, SLDataType x);
//尾删
void SeqListPopBack( SeqList* ps);
//头插
void SeqListPushFront( SeqList* ps, SLDataType x);
//头删
void SeqListPopFront( SeqList* ps);

//任意位置的插入删除
void SeqListInsert(SeqList* ps, int pos, SLDataType x);
void SeqListErase(SeqList* ps, int pos);

void SeqListPrint(const SL* ps);

//查找
int SeqListFind(SL* ps, SLDataType x);

//...
/*
1.二分查找
2.排序
诸多操作
*/
顺序表的特性 
  1.  可动态增长数组。
  2. 数组在数组中存储时必须是连续的。

缺点:

  1. 中间或者头部的插入删除很慢,需要挪动数据。时间复杂度是O(N)。
  2. 空间不够时,增容会有一定的消耗和空间浪费。(空间碎片化)。

优点:

  1. 顺序表支持随机访问。
  2. 和链式存储结构相比,缓存命中率比较高。(物理空间连续导致的)。


链表

        链表是一种物理上非连续、非顺序,逻辑上是连续的存储结构。链表其实就是针对顺序表的缺点来设计的,补足的就是顺序表的缺点。

结点

结点的定义:

typedef int SListData;

//结点
typedef struct SListNode
{
	SListData data;
	struct SListNode* next;
}SL;

 链表的分类

 


http://www.kler.cn/a/408947.html

相关文章:

  • Python爬虫项目 | 二、每日天气预报
  • python中lxml 库之 etree 使用详解
  • Springboot项目添加拦截器
  • 一个关于 CSS Modules 的陷阱
  • 高级网络安全——SSL/TLS, HTTPS, VPN(week4)
  • 学习python的第十三天之函数——函数的返回值
  • RoPE——Transformer 的旋转位置编码
  • Centos使用docker搭建Graylog日志平台
  • python中的base64使用小笑话
  • vue从入门到精通(七):事件处理
  • 全新三网话费余额查询API系统源码 Thinkphp全开源 附教程
  • 力扣力扣力:860柠檬水找零
  • 【机器学习监督学习】:从原理到实践,探索算法奥秘,揭示数据标注、模型训练与预测的全过程,助力人工智能技术应用与发展
  • Unity 内置枚举(Option Stencil)
  • 【AI技术赋能有限元分析应用实践】Abaqus、 Ansys、FEniCSx 有限元结合深度学习
  • Java爬虫与淘宝API接口:深度解析销量和商品详情数据获取
  • FMCJ456-14bit 2通道3/2.6/2GS/s ADC +16bit 2通道12.6GS/s DAC FMC AD/DA子卡
  • 网站渗透测试工具zap2docker-stable
  • H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏
  • 第425场周赛题解:最小正和子数组
  • Fakelocation Server服务器/专业版 Centos7
  • 图形渲染性能优化
  • python中lxml 库之 etree 使用详解
  • Sparrow系列拓展篇:消息队列和互斥锁等IPC机制的设计
  • Go 语言中的海勒姆定律
  • Jenkins-Git Parameter 插件实现指定版本的发布和回滚