82.【C语言】数据结构之顺序表的初始化和销毁

news2024/11/29 10:53:21

目录

1.线性表

2.分类

1.静态顺序表:使用定长数组存储元素

代码示例(写入Seqlist.h中)

2.动态顺序表:使用与动态内存管理有关的函数

代码示例(写入Seqlist.h中)

补:数据管理的四个需求:增改删查

3.操作顺序表

1.初始化顺序表

1.不开辟空间

2.开辟空间

1.传值调用

2.传址调用

SeqList项目的函数的传址调用的过程


在软件开发中,存储列表常用顺序表或链表

1.线性表

定义:n个具有相同特性的数据元素的有限序列(相当于一条直线)(用数组存储),要求数据依次存储

2.分类

1.静态顺序表:使用定长数组存储元素

代码示例(写入Seqlist.h中)

typedef int SLDataType;//将int重定义为SLDataType
#define N 10
struct Seqlist
{
	SLDataType a[N];
	int size;
};

备注:SLDataType的全称 Sequence List Data Type,a[N]为int类型,含10个元素的空间

想修改a数组的空间大小,修改#define的那一行即可

缺点:空间少了不够用,空间多了浪费

2.动态顺序表:使用与动态内存管理有关的函数

代码示例(写入Seqlist.h中)

typedef int SLDataType;//将int重定义为SLDataType
struct Seqlist
{
	SLDataType* a;
	int size;
    int capacity;//空间的容量
};

补:数据管理的四个需求:

增:增加(插入数据); 删:删除数据; 查:搜索数据; 改:修改数据的内容

3.操作顺序表

1.初始化顺序表

1.不开辟空间

SeqList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>

typedef int SLDataType;//将int重定义为SLDataType
typedef struct Seqlist
{
	SLDataType* a;//动态顺序表
	int size;//有效数据的个数
	int capacity;//空间的容量
}SL;//SL 就是 struct Seqlist 

void SeqInit(SL s);//声明初始化顺序表的函数
void SeqDestory(SL s);//声明销毁顺序表的函数

将结构体写入头文件,这样多个源文件可以同时引用

main.c

#include "SeqList.h"
SL s;//全局变量

//定义测试顺序表的函数
void TestSeqList1()
{
	SeqInit(s);
}

int main()
{
	TestSeqList1();
	return 0;
}

注意:不能将SL s;写在TestSeqList1内,否则未初始化会报错

 

SeqList.c(将对操作顺序表的函数写入此文件)

#include "SeqList.h"
void SeqInit(SL s)
{
	s.a = NULL;
	s.size = 0;
	s.capacity = 0;
}

上述为s.a赋值为NULL

2.开辟空间

1.传值调用

在SeqList.h中添加

#define INIT_CAPACITY 4//初始容量为4

SeqList.c修改为

#include "SeqList.h"
void SeqInit(SL s)
{
	s.a = (SLDataType*)malloc(sizeof(SLDataType)*INIT_CAPACITY);
	if (s.a == NULL)
	{
		perror("malloc");
        //错误返回,不用返回具体的数,因为SeqInit的返回类型为void
		return;
	}
	s.size = 0;
	s.capacity = INIT_CAPACITY;
}

注意:

1.在68.【C语言】动态内存管理(重点)(1) 讲过,malloc函数可能开辟不成功,需要判断返回的指针是否为NULL

2.这里SeqInit(s);是传值调用,形参是实参的一份拷贝

2.传址调用

SeqList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>

typedef int SLDataType;//将int重定义为SLDataType
#define INIT_CAPACITY 4
typedef struct Seqlist
{
	SLDataType* a;//动态顺序表
	int size;//有效数据的个数
	int capacity;//空间的容量
}SL;

void SLInit(SL* ps);//声明初始化顺序表的函数
void SLDestory(SL* ps);//声明销毁顺序表的函数

main.c

#include "SeqList.h"
//定义测试顺序表的函数
void TestSeqList1()
{
	SL s;
	SLInit(&s);
	SLDestory(&s);
}

int main()
{
	TestSeqList1();
	return 0;
}

SeqList.c(将对操作顺序表的函数写入此文件)

#include "SeqList.h"
void SLInit(SL* ps)
{
	ps->a = (SLDataType*)malloc(sizeof(SLDataType)*INIT_CAPACITY);
	if (ps->a == NULL)
	{
		perror("malloc");
		return ;//错误返回
	}
	ps->size = 0; 
	ps->capacity = 0;
}
SeqList项目的函数的传址调用的过程

main()-->TestSeqList1()-->SLInit(&s)-->函数逐个返回

2.销毁顺序表

SeqList.c写入

void SLDestory(SL *ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->size = ps->capacity = 0;
}

注:在定义结构体时, a为指针,先对指针释放,再置为NULL;size和capacity为int类型,置为0即可

SLDataType* a;
int size;
int capacity;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

Vxe UI vue vxe-table grid 性能优化,提高渲染性能

Vxe UI vue vxe-table vxe-grid 本身就支持虚拟滚动以及灵活的扩展&#xff0c;可也是由于太过灵活&#xff0c;可定制化程度太高&#xff0c;比如单元格自定义渲染&#xff0c;一旦写得不好&#xff0c;就会影响渲染卡顿。 vxe-table 和 vxe-grid 直接使用 vxe-grid&#xf…

AI论文写作:如何轻松实现高原创度大揭秘

随着人工智能技术的迅猛进步&#xff0c;AI论文写作工具在学术界开始崭露头角&#xff0c;作为一种辅助手段。这些工具不仅能高效地生成论文的初步版本或部分章节&#xff0c;而且其产出的内容往往展现出高度的创新性。本文将探讨AI论文写作工具为何能产出如此高原创度的内容&a…

欢迎观看在线直播|李航和张志华等嘉宾解读:人工智能和诺贝尔奖相遇,是偶然还是必然?

人工智能是新一轮产业革命的核心技术&#xff0c;受到了各个国家和不同领域人士的高度重视。不仅如此&#xff0c;它还为基础科学的研究创造出了新的研究范式。诺贝尔奖是科学界最著名的奖项之一&#xff0c;可谓是万众瞩目。2024年的诺贝尔物理奖和化学奖均授予了具有人工智能…

mysql的各种存储引擎

文章目录 前言1. InnoDB特点 2. MyISAM特点innodb与myisam引擎之间的区别 3. MEMORY特点 4. ARCHIVE特点 5. NDBCluster特点 6. FEDERATED特点 7. CSV特点 总结 前言 MySQL 支持多种存储引擎&#xff0c;每种引擎都有其独特的功能和适用场景。存储引擎是指数据库管理系统用来存…

Apache Seatunnel Zeta引擎-启动脚本分析

Apache SeaTunnel Zeta引擎的集群模式启动的第一步是执行bin/seatunnel-cluster.sh脚本&#xff0c;所以先来学习下这个脚本。 脚本执行流程分析 脚本简要注释 #!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license a…

【Tinymce】富文本编辑器在vue项目中的使用;引入付费格式刷,上传视频、图片

引言 富文本编辑器有很多&#xff0c;对比了一下&#xff0c;还是决定用tinymce&#xff08;号称宇宙最强&#xff09;&#xff0c;基础的插件确实好用&#xff0c;但是一些更好用的插件&#xff0c;比如格式刷等都是高级版&#xff08;付费&#xff09;&#xff0c;当然也有人…

day-69 构成整天的下标对数目 II

思路 根据题意&#xff0c;每个元素可以重复使用&#xff0c;所以只需统计对24取余后值值相同的个数&#xff0c;如当前数字对24取余后是3&#xff0c;那么只需知道取余后为21的元素个数即可知道当前元素可与&#xff0c;多少个元素构成整天的下标的数目 解题过程 从左往右遍历…

数据结构编程实践20讲(Python版)—20并查集

本文目录 20 并查集&#xff08;Union-Find Set&#xff09;S1 说明并查集的定义并查集基本操作并查集优化并查集特点应用领域 S2 示例S3 问题1&#xff1a;朋友圈问题S4 问题2&#xff1a;网络连接恢复问题S5 问题3&#xff1a;随机生成迷宫 往期链接 01 数组02 链表03 栈04 …

023_Layout_and_Containers_in_Matlab界面布局与容器

容器 基于uifigure进行的图形用户界面设计&#xff0c;可以分为以下几种容器类型&#xff1a; 图窗&#xff1a;uifigure布局&#xff1a;uigridlayout面板&#xff1a;uipanel标签页&#xff1a;uitabgroup、uitab 这几个对象除uifigure外相互可以形成嵌套的关系&#xff0…

【新人系列】Python 入门(二):Python IDE 介绍

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

leetcode.204.计数质数

#中等#枚举 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 埃氏筛 枚举没有考虑到数与数的关联性&#xff0c;因此难以再继续优化时间复杂度。接下来我们介绍一个常见的算法&#xff0c;该算法由希腊数学家厄拉多塞&#xff08;Eratosthenes&#xff09;提…

Python爬虫:自动化获取商品评论数据

为什么选择Python爬虫API 高效的数据处理&#xff1a;Python的数据处理能力&#xff0c;结合Pandas等库&#xff0c;可以轻松处理和分析大量的评论数据。丰富的库支持&#xff1a;Python拥有丰富的库&#xff0c;如requests用于发送HTTP请求&#xff0c;BeautifulSoup用于解析…

初识MySQL · 数据库

目录 前言&#xff1a; 数据库 简单使用 存储引擎 前言&#xff1a; 本文也是MySQL的第一篇文章了&#xff0c;新的知识点已经出现&#xff0c;怎么能够停止不前&#xff0c;穿越时空……(迪迦奥特曼乱入哈哈哈)。 言归正传&#xff0c;我们在本文的目标有&#xff1a; …

工厂生成中关于WiFi的一些问题

一 背景: 主要做高通和MTK,工厂生成中通过使用adb wifi,因为这样生产效率高并且避免了新机器有划痕,但是也经常碰到adb wifi无法连接的问题,那么是什么原因导致呢? 二 案例 测试步骤: 使用adb wifi连接手机测试工厂case adb usb adb tcpip 5555 adb connect DU…

高效监控系统:Nightingale本地化部署与远程访问指南

文章目录 前言1. Linux 部署Nightingale2. 本地访问测试3. Linux 安装cpolar4. 配置Nightingale公网访问地址5. 公网远程访问Nightingale管理界面6. 固定Nightingale公网地址 前言 本文主要介绍如何在本地Linux系统部署 Nightingale 夜莺监控并结合cpolar内网穿透工具实现远程…

Android组件化、模块化、Catalogs

前言 下载代码-----》码云下载 下载代码-----》github下载 本篇是Android最新的依赖架构设计&#xff0c;gradle版本要8.0以上&#xff0c;代码实现基于8.5.1。好多年开发过程中&#xff0c;我们碰到config.gradle&#xff0c;buildSrc&#xff0c;composing builds等依赖编译…

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机&#xff0c;而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验&#xff0c;这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

用作曲的手法写旋律 什么是动机 ​动机扩大 单音重复 移八度

【你怎么还不会写旋律&#xff01;&#xff01;&#xff01;猴子都听的懂的旋律教程来了&#xff01;两分钟让你快速上手&#xff01;】 你怎么还不会写旋律&#xff01;&#xff01;&#xff01;猴子都听的懂的旋律教程来了&#xff01;两分钟让你快速上手&#xff01;_哔哩哔…

同济子豪兄--图的基本表示【斯坦福CS224W图机器学习】

无向图&#xff08;Undirected Graph&#xff09;&#xff1a; 在无向图中&#xff0c;边没有方向&#xff0c;即如果顶点A和顶点B之间有一条边&#xff0c;那么这条边既表示A到B的关系&#xff0c;也表示B到A的关系。换句话说&#xff0c;边是双向的。无向图的边通常用一条线段…