(go)线性表的顺序存储

闲来无事,更新一下,线性表的顺序存储,go语言版本,效果都已经测试过,下面给出各部分细节

文章目录

    • 1、生成一个线性表
    • 2、查找
    • 3、插入
    • 4、求长度
    • 5、改值
    • 6、删除
    • 7、遍历
    • 8、测试程序
    • 9、完整代码
    • 总结

package mainimport "fmt"const MAXSIZE = 100type LNode *List
type ElementType int
type List struct {Data []ElementTypeLast int
}
type L List

1、生成一个线性表

func MakeEmpty() *List {PtrL := &List{Data: make([]ElementType, MAXSIZE), // 初始化 Data 切片Last: -1,}return PtrL
}

2、查找

func Find(x ElementType, PtrL *List) int {i := 0for i <= PtrL.Last && PtrL.Data[i] != x {i++}if i > PtrL.Last {return -1} else {return i + 1}
}
func FindKth(K int, PtrL List) ElementType {if K < 1 || K > PtrL.Last+1 {return -1} else {return PtrL.Data[K+1]}
}

3、插入


func Insert(x ElementType, i int, PtrL *List) {j := 0if PtrL.Last == MAXSIZE-1 {fmt.Printf("Data Full")return}if i < 1 || i > PtrL.Last+2 {fmt.Printf("Position abnormal")return}for j = PtrL.Last; j >= i-1; j-- {PtrL.Data[j+1] = PtrL.Data[j]}PtrL.Data[i-1] = xPtrL.Last++return
}

4、求长度

func Length(PtrL List) int {return PtrL.Last
}

5、改值

func Alter(x ElementType, i int, PtrL *List) {if i < 1 || i > PtrL.Last+1 {fmt.Printf("No find element:%d", i)return}PtrL.Data[i] = x
}

6、删除

func Delete(i int, PtrL *List) {j := 0if i < 1 || i > PtrL.Last+1 {fmt.Printf("Not Find Element,")return}for j = i; j <= PtrL.Last; j++ {PtrL.Data[j-1] = PtrL.Data[j]}PtrL.Last--return}

7、遍历

func PrintL(PtrL *List) {for i := 0; i <= PtrL.Last; i++ {fmt.Printf(" %d", PtrL.Data[i])}fmt.Println()
}

8、测试程序

func main() {L := MakeEmpty()Insert(1, 1, L)Insert(2, 2, L)Insert(3, 3, L)Insert(4, 4, L)Insert(5, 5, L)Insert(6, 6, L)PrintL(L) //打印Delete(2, L)PrintL(L)Alter(2, 2, L)PrintL(L)x := Find(2, L)fmt.Println("result:", x)FindKth(2, *L)length := Length(*L)fmt.Println("len:", length)
}

在这里插入图片描述

9、完整代码

package mainimport "fmt"const MAXSIZE = 100type LNode *List
type ElementType int
type List struct {Data []ElementTypeLast int
}
type L Listfunc MakeEmpty() *List {PtrL := &List{Data: make([]ElementType, MAXSIZE), // 初始化 Data 切片Last: -1,}return PtrL
}func Find(x ElementType, PtrL *List) int {i := 0for i <= PtrL.Last && PtrL.Data[i] != x {i++}if i > PtrL.Last {return -1} else {return i + 1}
}func Insert(x ElementType, i int, PtrL *List) {j := 0if PtrL.Last == MAXSIZE-1 {fmt.Printf("Data Full")return}if i < 1 || i > PtrL.Last+2 {fmt.Printf("Position abnormal")return}for j = PtrL.Last; j >= i-1; j-- {PtrL.Data[j+1] = PtrL.Data[j]}PtrL.Data[i-1] = xPtrL.Last++return
}
func Length(PtrL List) int {return PtrL.Last
}func Alter(x ElementType, i int, PtrL *List) {if i < 1 || i > PtrL.Last+1 {fmt.Printf("No find element:%d", i)return}PtrL.Data[i] = x
}
func FindKth(K int, PtrL List) ElementType {if K < 1 || K > PtrL.Last+1 {return -1} else {return PtrL.Data[K+1]}
}func Delete(i int, PtrL *List) {j := 0if i < 1 || i > PtrL.Last+1 {fmt.Printf("Not Find Element,")return}for j = i; j <= PtrL.Last; j++ {PtrL.Data[j-1] = PtrL.Data[j]}PtrL.Last--return}
func PrintL(PtrL *List) {for i := 0; i <= PtrL.Last; i++ {fmt.Printf(" %d", PtrL.Data[i])}fmt.Println()
}func main() {L := MakeEmpty()Insert(1, 1, L)Insert(2, 2, L)Insert(3, 3, L)Insert(4, 4, L)Insert(5, 5, L)Insert(6, 6, L)PrintL(L) //打印Delete(2, L)PrintL(L)Alter(2, 2, L)PrintL(L)x := Find(2, L)fmt.Println("result:", x)FindKth(2, *L)length := Length(*L)fmt.Println("len:", length)
}

在这里插入图片描述

总结

看着c语言敲的,只是对语法进行简单了解

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap相关面试题(哈希表、HashMap的实现原理、HashMap的put方法的具体流程、HashMap的扩容机制、HashMap的寻址算法)

文章目录 1. 散列表&#xff08;哈希表&#xff09;1.1 散列表的概念1.2 散列函数1.3 散列冲突1.4 散列冲突-链表法&#xff08;拉链法&#xff09;1.4.1 插入操作1.4.2 查找和删除操作 2. HashMap的实现原理3. HashMap 的 put 方法的具体流程4. HashMap 的扩容机制5. HashMap …

Prometheus监控Kubernetes ETCD

文章目录 一、kubeadm方式部署etcd1.修改etcd指标接口监听地址2.prometheus中添加etcd的服务发现配置3.创建etcd的service4.grafana添加etcd监控模版 二、二进制方式部署k8s etcd1.将etcd服务代理到k8s集群2.创建etcd证书的secrets3.prometheus挂载etcd证书的secrets4.promethe…

【c++】常量周边:常量概念及定义

目录 前言 1.常量是什么&#xff1f; 2.常量的的类型 本质区别&#xff1a; 1&#xff09;文字常量&#xff08;无法取地址&#xff09; &#x1f337;什么是字面值&#xff1f;&#xff1f; 字面值后缀 &#x1f337;文字&#xff08;字面&#xff09;常量的基本类型 …

双指针--优选算法

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、OJ题 前言&#xff1a; 该篇文章我们主要来学习的是双指针算法&#xff0c;对于该类算法我们可以直接来做题&#xff0c;从题中去感知该算法的魅力&#xff0c;最后再从题中做总…

Elasticsearch Suggesters API详解与联想词自动补全应用

Elasticsearch Suggesters API详解与联想词自动补全应用 引言Elasticsearch Suggesters1. Term Suggester实现步骤示例 2. Phrase Suggester示例 3. Completion Suggester创建映射和插入数据查询示例 4. Context Suggester示例 Completion Suggester1. 工作原理2. 使用流程3. 使…

东软 在大健康路上“笨鸟先飞”

若不是东软医疗引入“国家队”通用技术集团作为其最重要的战略投资人&#xff0c;恐怕很多人并不会留意东软“蛰伏”在大健康的赛道上&#xff0c;已有30年。 1997年的一天&#xff0c;沈阳高新技术产业开发区的东大软件园里&#xff0c;创立东软不过6年时间的刘积仁思量着眼前…

并发性服务器

同一时刻能处理多个客户端 多进程&#xff1a; int init_tcp_ser(const char *ip,unsigned short port) {int sockfd socket(AF_INET,SOCK_STREAM,0);if(-1 sockfd){perror("fail socket");return -1;}struct sockaddr_in ser;ser.sin_family AF_INET;ser.sin_por…

tomcat在eclipse中起动成功,无法访问tomcat主页

最近通过geoserver的war包将&#xff0c;geoserver服务部署到了tomcat&#xff0c;发现在eclipse中启动服务后&#xff0c;无法访问localhost&#xff1a;8080主页&#xff0c;geoserver主页&#xff1a;localhost:8080/geoserver/web同样也无法访问。 只需要双击下面的server…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节&#xff1a;自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”&#xff0c;它能够把输入的数据&#xff08;比如图片&#xff09;压缩成一个更小的表示&#xff08;编码&#…

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…

仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸

本功能基于Android13 Launcher3 需求:模仿华为问界车机,实现横向滑动桌面空白处,切换壁纸功能(本质只是切换背景,没有切换壁纸)。 实现效果: 实现思路: 第一步首先得增加手势识别 第二步切换底图,不切换壁纸是因为切换壁纸动作太大,需要调用到WallpaperManager,耗…

StringTable

10.1. String的基本特性 String&#xff1a;字符串&#xff0c;使用一对""引起来表示String声明为final的&#xff0c;不可被继承String实现了Serializable接口&#xff1a;表示字符串是支持序列化的。String实现了Comparable接口&#xff1a;表示string可以比较大小…

六. 部署分类器-trt-engine-explorer

目录 前言0. 简述1. 案例运行2. 补充说明3. engine分析结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第六章—部署分类器&#xff0c;一起来学习 trt-engine…

更新RK3588开发板的rknn_server和librknnrt.so【这篇文章是RKNPU2从入门到实践 --- 【5】的配套文章】

作者使用的平台有&#xff1a; 一台装有Windows系统的宿主机&#xff0c;在该宿主机上装有Ubuntu 20.04虚拟系统&#xff1b; 瑞芯微RK3588开发板&#xff0c;开发板上的系统为Ubuntu22.04系统&#xff1b; 更新板子的 rknn_server 和 librknnrt.so&#xff0c;rknn_server 和…

借鉴腾讯系统架构从小到大的过程 - 如何做好一个系统设计?不限于(慧哥)慧知开源充电桩平台

推荐一套企业级开源充电桩平台&#xff1a;完整代码包含多租户、硬件模拟器、多运营商、多小程序&#xff0c;汽车 电动自行车、云快充协议&#xff1b;——(慧哥)慧知开源充电桩平台&#xff1b;https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001…

倒计时1天!每日一题,零基础入门FPGA

近年来&#xff0c;FPGA工程师凭借着远高于传统软件开发工程师的薪酬&#xff0c;吸引了越来越多的人转行。 然而&#xff0c;入门FPGA并非易事。你需要有清晰的学习路线&#xff0c;包括它的基本组成&#xff08;如可编程逻辑块CLB、输入输出块IOB、内部连线资源等&#xff0…

JS设计模式之“分即是合” - 建造者模式

引言 当我们在进行软件编程时&#xff0c;常常会遇到需要创建复杂对象的情况。这些对象可能有多个属性&#xff0c;属性之间存在依赖关系&#xff0c;或需要按照特定的骤来创建。在这种情况下&#xff0c;使用建造者模式&#xff08;Builder Pattern&#xff09;可以提供一种活…

selenium启动总报错 WebDriverManager总是异常

我的环境用这个自动管理驱动的工具 WebDriverManager 总是报错 尝试过很多方法都没有&#xff0c;只好手动指定浏览器的位置 System.setProperty("webdriver.chrome.driver", "C:\\Users\\27224\\.cache\\selenium\\chromedriver\\win64\\128.0.6613.84\\chrome…

HTTP 协议详解

0x01&#xff1a;HTTP 协议简介 HTTP&#xff08;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是一个工作在应用层的协议&#xff0c;它通常运行在 TCP 之上&#xff0c;它指定了客户端以什么样的格式发送信息&#xff0c;以及得到什么样的响…

uniapp微信小程序开发测试获取手机号码

先申请测试号 注意认证但是没有完全认证不要试测试号解密如下 总结我自己的两大坑 1.官网的WXBizDataCrypt需要导入crypto要提前下载但是试了很多次没有效果重新编写这个。将crypto库换成crypto-js库 2.我一直在尝试用下有下面这个界面的测试号不行获取不到用户的code还是啥忘记…