顺序表-Go语言实现
简单理解就是数组;
优缺点及使用场景
优点:
随机访问,在O(1)时间内找到第i个元素;
数据表中的数据是连续存放的,因此只要知道数据表中第一个元素的地址,那么后面的数据元素的地址就可以马上算出来。
存储密度高,每个节点只存储数据元素本身;
无需为表中元素之间的逻辑关系添加额外的存储空间;
缺点:
扩展容量不方便;
静态分配不能拓展容量;即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高;
插入、删除操作不方便,需要移动大量元素
️:尾插效率高!
使用场景:
- 存储密度高;
- 对头,中插入删除操作不频繁,可对尾频繁插入,删除;
- 创建顺序表之前需要对MaxSize有合理预估;
常用操作
顺序表结构,一般有:表体、描述(如length);
const MaxSize int = 100
type SeqList struct {
data []int
length int
}
插入:把插入位置i之后的所有元素往后移再插入;
//InsertList 把value插入第i位置,i-1为index;i从1开始
func (s *SeqList) InsertList(value, i int) error {
if i < 1 || i > s.length+1 {
return errors.New("error insert location")
}
for j := s.length; j >= i-1; j-- {
s.data[j] = s.data[j-1]
}
s.data[i-1] = value
s.length++
return nil
}
删除:把删除位置i之后的所有元素往前移,覆盖掉原来第i个;
//DeleteList 删除第i个
func (s *SeqList) DeleteList(i int) error {
if i < 1 || i > s.length {
return errors.New("delete error location")
}
for j := i; j < s.length; j++ {
s.data[j-1] = s.data[j]
}
s.length--
return nil
}
Golang实现
package main
import (
"errors"
"fmt"
)
const MaxSize int = 100
type SeqList struct {
data []int
length int
}
//NewSeqList 声明并初始化顺序表,为顺序表分配内存空间;
func NewSeqList() *SeqList {
if MaxSize == 0 {
return nil
}
return &SeqList{
data: make([]int, MaxSize, MaxSize),
length: 0,
}
}
//CreateList 给表里添加初始元素
func (s *SeqList) CreateList(data []int, n int) error {
if n > MaxSize {
return errors.New("表长不足")
}
for i, value := range data {
s.data[i] = value
}
s.length = n
return nil
}
//InsertList 把value插入第i位置,i-1为index;i从1开始
func (s *SeqList) InsertList(value, i int) error {
if i < 1 || i > s.length+1 {
return errors.New("error insert location")
}
for j := s.length; j >= i-1; j-- {
s.data[j] = s.data[j-1]
}
s.data[i-1] = value
s.length++
return nil
}
//DeleteList 删除第i个
func (s *SeqList) DeleteList(i int) error {
if i < 1 || i > s.length {
return errors.New("delete error location")
}
for j := i; j < s.length; j++ {
s.data[j-1] = s.data[j]
}
s.length--
return nil
}
func main() {
seqList := NewSeqList()
initDate := []int{0, 1, 2, 3, 4, 5, 6}
err := seqList.CreateList(initDate, len(initDate))
if err != nil {
fmt.Println(err)
}
seqList.InsertList(10, 2)
seqList.SeqListPrint()
seqList.DeleteList(2)
seqList.SeqListPrint()
}
//SeqListPrint 答应顺序表
func (s *SeqList) SeqListPrint() {
fmt.Println("-------------------")
fmt.Print("data: ")
for i := 0; i < s.length; i++ {
fmt.Printf("%v ", s.data[i])
}
fmt.Println()
fmt.Println("length: ", s.length)
}
顺序表-Go语言实现的更多相关文章
- 数据结构与算法之顺序表C语言实现
顺序表等相关概念请自行查阅资料,这里主要是实现. 注: 1.顺序表C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简单函数,可自行添加功能: 4.可用C+ ...
- 顺序表C语言版
#include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...
- 线性表之顺序表(C语言实现)
线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一 ...
- 顺序表-C语言实现
顺序存储线性表的结构体: #define MAXSIZE 100 //数组最大长度 typedef int ElemType; //元素类型 typedef struct //定义线性表结构体 { E ...
- 数据结构C语言版--动态顺序表的基本功能实现(二)
/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...
- C语言实现顺序表
C语言实现顺序表代码 文件SeqList.cpp #pragma warning(disable: 4715) #include"SeqList.h" void ShowSeqLi ...
- c语言进阶12-线性表之顺序表
一. 线性表的定义 为什么要学习线性表呢? 因为我们日常生活中存在种数据关系,计算机程序是为了解决日常生活的数据关系,因此我们要学习线性表. 线性表是什么呢? 线性表是由n个元素组成的有限序列. 需 ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 【数据结构】之顺序表(C语言描述)
顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...
随机推荐
- C# 使用163的SMTP服务器发送邮件
string Receiver, string Subject, string content: //163邮箱发送配置 client = new System.Net.Mail.SmtpClient ...
- CF1547B Alphabetical Strings 题解
Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...
- LuoguP7019 [NWRRC2017]Auxiliary Project 题解
Update \(\texttt{2021.6.24}\) 修改了一处格式上的错误和一处笔误. Content 已知用 LED 灯来显示 \(0\sim9\) 这十个数字分别需要 \(6,2,5,5, ...
- 【九度OJ】题目1073:杨辉三角形 解题报告
[九度OJ]题目1073:杨辉三角形 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1073 题目描述: 输入n值,使用递归函数,求杨 ...
- Python实现北邮人论坛模拟登录
推荐去我的博客里查看这篇文章,效果更佳: http://fuxuemingzhu.cn/2017/08/12/byrbbs-login/ 模拟登录北邮人论坛可能是每个学着写爬虫的北邮人必备技能了.在网 ...
- B. Petya and Exam
B. Petya and Exam 题目链接 题意 给你一串字符,在这个串中所有出现的字符都是\(good\)字符,未出现的都是\(bad\)字符, 然后给你另一串字符,这个字符串中有两个特殊的字符, ...
- 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)
[剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...
- AUGMIX : A SIMPLE DATA PROCESSING METHOD TO IMPROVE ROBUSTNESS AND UNCERTAINTY
目录 概 主要内容 实验的指标 Dan Hendrycks, Norman Mu,, et. al, AUGMIX : A SIMPLE DATA PROCESSING METHOD TO IMPRO ...
- [C]郝斌C语言课程大纲及笔记
本笔记整理于郝斌老师C语言课程,做学习参考之用. 1.[编程笔记]第一章 C语言概述 2.[编程笔记]第二章 C语言预备知识 3.[编程笔记]第三章 运算符与表达式 4.[编程笔记]第四章 流程控制 ...
- [Git]解决Permission denied, please try again问题
在gitlab上传项目的时候出现Permission denied, please try again问题, 网上有很多解释,但是都没能解决我的问题,后来经过自己尝试成功了,这里把经验分享给大家. 在 ...