IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 线性表的顺序表示与实现1 -> 正文阅读

[数据结构与算法]线性表的顺序表示与实现1

线性表的顺序表示和实现1

在计算机内,线性表有两种基本的存储结构:顺序存储结构和链式存储结构

线性表的顺序表又称为顺序存储结构或顺序映像

1、顺序存储定义:

顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构

image-20211014091834506

逻辑上相邻,物理上也相邻

基地址(起始位置):线性表的第一个数据元素a1的存储位置

2、顺序存储结构:

依次存储,地址连续,中间没有空出存储单元,(占用一片连续的存储空间)是一个典型的线性表顺序存储结构

3、顺序表中元素存储位置的计算:

知道首地址和每个元素占的内存单元数 即可计算每个元素的存储位置

任一元素均可随机存取(优点) 存和取

4、顺序表的顺序存储表示:

image-20211014164750265 ----- 用一维数组表示顺序表

线性表长度可变 但是数组的长度不可动态定义(不可变) ----- 单独用一变量表示顺序表的长度

5、线性表的定义:

#define LIST_INIT_SIZE 100   //线性表存储空间的初始分配量     
typedef struct{
    ElemType elem[LIST_SIZE];  //数组
    int length;  //当前长度
}SqList; 

init(initialization初始化) SqList(顺序表) ElemType(元素类型)

多项式的顺序存储结构类型定义:
image-20211014171033457
#define MAXSIZE 1000   //多项式可能达到的最大长度

typedef struct {    //多项式非零项的定义
    float p;        //系数
    int e;      	//指数
}Polynomial;//一个该元素类型8个字节(4+4)

typedef struct {    //线性表定义
    Polynomial *elem;  //存储空间的基地址    元素类型是Polynomial  好比int *elem
    int length;   	   //多项式中当前项的个数
}SqList;     
    

Polynomial: 多项式

图书表的顺序存储结构类型定义:
image-20211014172237278
#define MAXSIZE 10000   //图书表可能达到的最大长度

typedef struct {  //图书信息定义
    char no[20];    //图书ISBN
    char name[50];  //图书名字
    float price;    //图书价格
}Book;

typedef struct {
    Book *elem;   //存储空间的基地址 Book型
    int length;   //图书表中当前图书的个数
}SqList;   //图书表的顺序存储结构类型为SqList

6.类C语言有关操作

1.顺序表类型定义
typedef struct {
    ElemType date[];   //定义数组 
    int length;   //定义长度 
}SqList;

ElemType元素类型:可写char、float、Book结构类型、Polynomial结构类型

可事先做 typedef char ElemType; typedef int ElemType; 将ElemType定义为char/int类型来使用

2.数组定义

数组静态分配:

typedef struct {
    ElemType date[MaxSize];  //数组名也是首地址
    int length;
}SqList;   //顺序表类型

数组动态分配:

typedef struct {
    ElemType *date;  //数组的首地址
    int length;
}SqList;   //顺序表类型
3.C语言的内存动态分配

需要加载头文件:include < stdlib.h >

malloc(m)函数:开辟m字节长度的地址空间,并返回这段空间的首地址 m为整数

free§函数:释放指针p所指变量的存储空间,即彻底删除一个变量

动态分配内存:

SqList L; //用顺序表类型定义1个变量L
L.date=(ElemType*)malloc(sizeof(ElemType)*MaxSize);  //基地址
   	(申请的空间如何划分)malloc(需要的字节数)
(L.date是数组的首地址)

(char*)malloc(800) —> 800个空间

(int*)malloc(800) —> 200个空间

(Polynomial*)malloc(800) —> 100个空间

***** :( )是强制类型转换运算—>(int)强转为整数 (int*)强转为指向整型的指针

malloc() 与 free() 配套使用

new 与 delete 配套使用

4.C++的动态存储分配

new 类型名T (初值列表)

功能:申请存放T类型对象的内存空间,并依初值列表赋以初值

结果值:成功:T类型的指针,指向新分配的内存 失败:0(NULL)

int *p1 = new int; 没有赋初值

int *p1 = new int(10); 赋初值10

delete 指针P

功能:释放指针P所指向的内存。P必须是new操作的返回值

delete p1;

5.C++中的参数传递

参数传递的两种方式

1、传值方式:参数为整型、实型、字符型等

2、传地址:参数是指针变量

? 参数是引用类型(C++) &

? 参数是数组名

引用类型作参数

引用:给对象提供一个替代的名字

int i=5; int &j=i; (j引用i) j是i的一个替代名,操作i和j是一样的,i值改变时,j值也跟着改变

★:i、j地址一样,共用同一个空间

void swap (float &m, float &n){};   swap(a,b)

m引用a,n引用b  &m=a, &m=b。m和a用同一块空间,n和b用同一块空间

相比一般变量作参数,节省了实参变量副本的空间

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:55:23  更:2021-12-09 11:58:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/10 2:03:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码