简单理解就是数组;

优缺点及使用场景

优点:

  • 随机访问,在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语言实现的更多相关文章

  1. 数据结构与算法之顺序表C语言实现

    顺序表等相关概念请自行查阅资料,这里主要是实现. 注: 1.顺序表C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简单函数,可自行添加功能: 4.可用C+ ...

  2. 顺序表C语言版

    #include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...

  3. 线性表之顺序表(C语言实现)

    线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一 ...

  4. 顺序表-C语言实现

    顺序存储线性表的结构体: #define MAXSIZE 100 //数组最大长度 typedef int ElemType; //元素类型 typedef struct //定义线性表结构体 { E ...

  5. 数据结构C语言版--动态顺序表的基本功能实现(二)

    /* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...

  6. C语言实现顺序表

    C语言实现顺序表代码 文件SeqList.cpp #pragma warning(disable: 4715) #include"SeqList.h" void ShowSeqLi ...

  7. c语言进阶12-线性表之顺序表

    一.  线性表的定义 为什么要学习线性表呢? 因为我们日常生活中存在种数据关系,计算机程序是为了解决日常生活的数据关系,因此我们要学习线性表. 线性表是什么呢? 线性表是由n个元素组成的有限序列. 需 ...

  8. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  9. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

随机推荐

  1. 这样学习ZooKeeper离大厂所需技能要求还远吗

    概述 定义 Apache ZooKeeper是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...

  2. springboot 整合activemq

    1.配置连接信息 spring: activemq: broker-url: tcp://192.168.1.28:61616 user: admin password: 123456 package ...

  3. SpringBoot单元测试demo

    引入maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  4. Polyomino Composer(UVA12291)

    Description   Polyomino Composer  A polyomino is a plane geometric figure formed by joining one or m ...

  5. Oracle VirtualBox 配置宿主机与虚拟机互访

    写作原因 之前经常使用 VMware Workstation Pro,由于是非正常付费使用的不打算再用了.替代品就是 Oracle VirtualBox,但是发现了一个问题: "我想用NAT ...

  6. Java Web大作业——编程导航系统

    title: Java Web大作业--编程导航系统 categories: - - 计算机科学 - Java abbrlink: 40bc48a1 date: 2021-12-29 00:37:35 ...

  7. 设置div背景透明的两种方法

    实现div背景透明的两种方法 1.使用opacity属性 background-color:#000; opacity: 0.5; 这样做可以设置div内部所以区域的透明度,但是也会影响里面的文字,效 ...

  8. salesforce零基础学习(一百一十)list button实现的一些有趣事情

    本篇参考: salesforce零基础学习(九十五)lightning out https://developer.salesforce.com/docs/component-library/docu ...

  9. 基于 Electron 的 Rubick 2.4k star 啦,同步更新新功能!

    为什么要做 Rubick 其实做 Rubick 1.x 的初衷就是解决自己的问题的:特别需要一款支持自定义插件的桌面端应用来简化使用者安装庞大桌面端应用的臃肿.而且涉及到数据安全的问题,插件只能在公司 ...

  10. 「MySql高级查询与编程」练习:企业员工管理

    题目:企业员工管理 一.语言和环境 1.实现语言:SQL. 2.开发环境:MySQL,navicat for mysql. 二.题目(100分): 1.创建数据库及数据表: (1)创建数据库,名称为d ...