贪吃蛇(C语言版--1)

news2024/10/7 20:30:41

在我们学完C语言之后 我们准备写一个贪吃蛇的代码

但在我们写贪吃蛇代码之前 我们需要铺垫一些数据结构的知识

  1. 顺序表
  2. 基于顺序表实现通讯录项目
  3. 单链表
  4. 双向链表

  1. 顺序表(底层是数组)

顺序表其实是线性表(具有相同特性的数据结构的集合)的一种

线性表的物理地址不一定连续,这主要取决于线性表的存储结构。但其逻辑结构是连续的。

线性表主要有两种存储结构:顺序存储结构和链式存储结构。

常见的线性表实现方式有顺序存储(如数组)和链式存储(如链表)两种。顺序存储的线性表在物理内存中是连续存储的,访问速度快,但插入和删除操作可能需要移动大量元素。链式存储的线性表则通过指针链接各个元素,插入和删除操作较为方便,但访问速度可能较慢。

在顺序存储结构中,逻辑地址和物理地址都是连续的。这是因为顺序存储结构通常使用数组来实现,数组在内存中的存储是连续的,因此逻辑上相邻的元素在物理地址上也是相邻的。
然而,在链式存储结构中,情况就不同了。链式存储结构是通过指针或链接来建立数据元素之间的逻辑关系。在这种结构中,逻辑地址是连续的,但物理地址并不一定连续。每个元素在内存中占据一个存储单元,元素之间的逻辑关系是通过存储单元中的指针来指示的。因此,即使逻辑上相邻的元素,它们在物理内存中也可能相距很远。
总的来说,线性表的物理地址是否连续取决于其存储结构。顺序存储结构保证物理地址的连续性,而链式存储结构则允许物理地址的非连续性。这种灵活性使得链式存储结构在处理某些问题时(如插入和删除操作频繁的情况)更加有效。

顺序表的特性:

物理结构:连续

逻辑结构:连续

顺序表分类

静态顺序表(定长数组)

静态顺序表的定义:

数组大小给小了 空间不够用

数组大小给大了 空间浪费

其实定长数组我们已经使用的够多了  接下来我们讲讲动态内存开辟的数组--动态顺序表

动态顺序表(动态内存开辟的数组)

动态顺序表的定义:

当我们的空间不够时 我们便进行动态增容 动态数组会比定长数组更加的灵活

现在我们用代码来实现动态顺序表

我们使用头文件.h 和源文件.c来编程  当然也可以在一个源文件中写 但这会让代码比较冗杂

我们数据结构中 其实重要的就是四个操作:增删查改

当然还有初始化 销毁.....

我们这里要有一个习惯  每写一个操作之后 去测试该代码是否有效 不要等到所有代码写完再去测试  会比较难测试出来或者修改代码量会比较大

SeqList.h

  1. 我们首先给int创建一个别名SLDataType  这是为了方便之后的修改 比如说,我们想让数组arr为char类型 我们只需要改动一次  即:typedef char SLDataType
  2. 我们创建了一个结构体类型struct SeqList 并给其起了个别名为SL
  3. 在结构体类型中 有三个成员  有一个数组arr   size表示有效数据个数--也是数组最后一个元素的下标值+1  capacity表示为该数组分配的空间大小
  4. 接下来 我们声明了一些操作 如:初始化 销毁 增删查改等操作

SeqList.c

  1. 在该段代码中 我们需要注意的就是扩容代码的实现

在数据结构和算法的设计中,为了优化性能、减少内存分配的次数以及避免频繁的内存重新分配,开发者经常会采用一些启发式的方法来确定初始分配的空间大小或增长因子。乘以2或3是一种常见的选择,因为它提供了一个相对简单的增长策略,同时也在很多情况下提供了较好的性能。

所以我们在分配空间大小时 让其乘以2

在这里建议大家 在理解代码后 自己动手去实现一下 可能就发现自己会漏掉一些必要的代码 在手敲代码时 如尾插 头插时 我们可以通过画图的方式 增加自己的理解  但还需要告诉大家的是  动态顺序表的实现并不是只有这一种代码 我这里的代码只是我学习到的 或许你们的更加全面 并不需要完全照搬的 按照你的思路来敲一遍吧

基于顺序表实现通讯录项目

我们知道通讯录应该包含:姓名 性别 年龄 电话 住址等信息

功能要求:

增加联系⼈信息

删除指定联系⼈

查找制定联系⼈

修改指定联系⼈

显⽰联系⼈信息

Contact.h

需要注意的点 我已经在代码中给了注释 可能会有缺少 待我发现后或者有人提醒后 便进行改正

Contact.c

这里我就不对该代码进行解读了 其实更多还是基于顺序表的操作 其余则很简单了

一定要记得在完成一个操作的代码后 去测试一下该代码功能是否与期望相同

我的test.c中 我是写了个菜单

test.c

现在我运行下 当前我的代码

然后根据输入的操作命令来进行

大致代码如此 后面的操作我便不给大家演示了

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

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

相关文章

【网络编程】UDP实现回显服务器

一.网络编程的基本术语. 客户端 客户端是为用户提供本地服务的程序,通常位于用户设备上。也称为用户端,是相对于服务器而言的。它主要指安装在用户设备上的程序,这些程序能够与服务器进行通信,从而获取服务或者执行特定功能。在…

window轻松使用k8s

Docker Desktop安装篇 1、win安装 1、下载安装包 https://www.docker.com/products/docker-desktop/ 官网下载安装包 2、配置win支持虚拟化 不勾选Hyper-V,它和Windows Subsystem for Linux (WSL) 是两套功能,这里不选他 3、安装WSL配置window支持lin…

6-pytorch - 网络的保存和提取

前言 我们训练好的网络,怎么保存和提取呢? 总不可以一直不关闭电脑吧,训练到一半,想结束到明天再来训练,这就需要进行网络的保存和提取了。 本文以前面博客3-pytorch搭建一个简单的前馈全连接层网络(回归问…

Level protection and deep learning

1.模拟生成的数据 import randomdef generate_data(level, num_samples):if level not in [2, 3, 4]:return Nonedata_list []for _ in range(num_samples):# 构建指定等级的数据data str(level)for _ in range(321):data str(random.randint(0, 9))data_list.append(data)…

2.4G漂移小车电子方案 酷得智能科技

漂移高速遥控车是一种专门设计用于执行高速漂移动作的遥控车模型。以下是一些关于漂移高速遥控车的功能介绍: 1、高速性能:漂移车通常配备有强力的电机和电池,以便在保持高速的同时进行漂移动作。 2、漂移能力:漂移车的轮胎和悬挂…

操作系统—实现可变式分区分配算法

文章目录 实现可变式分区分配算法1.实验环境2.如何在xv6中实现分区分配算法?(1).xv6的内存管理机制(2).实现思路 3.最佳适应算法(1).基本思路(2).步骤(3).测试&Debug 总结参考资料 实现可变式分区分配算法 1.实验环境 因为这一次的实验仍然是在xv6中进行&#…

【AIGC】AIGC在虚拟数字人中的应用:塑造未来互动体验的革新力量

🚀 🚀 🚀随着科技的快速发展,AIGC已经成为引领未来的重要力量。其中,AIGC在虚拟数字人领域的应用更是引起了广泛关注。虚拟数字人作为一种先进的数字化表达形式,结合了3D建模、动画技术、人工智能等多种先进…

PaddleOCR训练自己模型(2)----参数配置及训练

一、介绍 paddleocr分为文字定位(Det)和文字识别(Rec)两个部分 二、定位模型训练 (1)Det预训练模型下载:https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_train.tar (2)下载完之后,…

女上司问我:误删除PG百万条数据,可以闪回吗?

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 擅长主流数据Oracle、MySQL、PG、openGauss运维 备份恢复,安装迁移,性能优化、故障应急处理等可提供技术业务: 1.DB故障处理/疑难杂症远程支援 2.Mysql/PG/Oracl…

32. BI - 依据淘宝的用户行为,从 0 开始实现一个简单的移动推荐系统

本文为 「茶桁的 AI 秘籍 - BI 篇 第 32 篇」 Hi, 你好。我是茶桁。 今天咱们要来完成一个简单的推荐系统的建立。 之前的课程里给大家讲了两种模型,也希望大家对模型的概念以及使用场景会有些了解。不光是推荐系统,在生物、心理学、社交网络等等里面都…

LangChain-Chatchat 开源知识库来了

LangChain-Chatchat 开源知识库来了 LangChain-Chatchat 架构设计LangChain-ChatChat 具体实现过程 一键本地离线部署软件环境硬件环境支持三种部署方式 LangChain-Chatchat 是基于 ChatGLM 等大语言模型与 LangChain 等应用框架实现,开源、可离线部署的 RAG 检索增…

安全特低电压 SELV(Safety Extra Low Voltage,缩写SELV) 是不接地系统的安全特低电压

SELV LED驱动器 市场上有很多LED灯是非隔离的,甚至还有灯条要100多伏特电压才能点亮的,安全吗? 国外多数LED驱动器标注了SELV,为什么? 安全特低电压 SELV(Safety Extra Low Voltage,缩写SELV) 是不接地系…

通过adb 命令打印安装在第三方模拟器上的log

1,环境:Windows 11 ,第三方模拟器 网易的MuMu 步骤: 1,打开cmd,输入 adb connect 172.0.0.1:7555 2,在cmd,再次输入adb logcat 回车

MongoDB的CURD(增删改查操作)

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 ✈️如果喜欢这篇文章的话 🙏大大们可以动动发财的小手👉&#…

初步学习node.js文件模块

环境已安装好; 写一个read1.js如下; var fs require("fs"); var data ;// 创建一个流 var stream1 fs.createReadStream(test1.jsp); stream1.setEncoding(UTF8);// 绑定data事件 stream1.on(data, function(mydata) {data mydata; });/…

竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

注册表让我重回80年代(狗头保命

现在是2024年4月16日23:09:07,今天之所以这么晚才睡,是因为遇到了一个很有意思的事情,以至于解决完之后,强挺困意,将其记录—— 缘由是想只用键盘操纵电脑,上面有写,那用winR就是家常便饭。只不…

贴片滚珠振动开关 / 振动传感器的用法

就是这种小东西: 上面的截图来自:https://item.szlcsc.com/3600130.html 以前写过一篇介绍这种东西内部的结构原理:贴片微型滚珠振动开关的结构原理。就是有个小滚珠会接通开关两边的电极,振动时滚珠会在内部蹦跳,开关…

基于Springboot的影城管理系统

基于SpringbootVue的影城管理系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页展示 电影信息 电影资讯 后台登录页 后台首页 用户管理 电影类型管理 放映…

RabbitMQ Stream插件使用详解

2.4版为RabbitMQ流插件引入了对RabbitMQStream插件Java客户端的初始支持。 RabbitStreamTemplateStreamListener容器 将spring rabbit流依赖项添加到项目中&#xff1a; <dependency><groupId>org.springframework.amqp</groupId><artifactId>sprin…