​

我学习顺序表时找不到相关的代码,以及我不清楚写一个线性表需要的知识,当我写出来可以使用的线性表我就把这些内容贴了出来。

前置知识点:结构体,常量指针,new和delete

顺序表的特点:

  1. 需要一片连续的存储空间
  2. 逻辑上相连的数据的存储位置也是相邻的。

所以如果我们想要创建一个顺序表我们需要做两件事:

  1. 向系统申请一片空间供数组使用。
  2. 创建一个指针记录空间地址。

而删除顺序表就是把空间释放,并让指针指向空。

顺序表的创建和销毁:

#include<iostream>
#include<cstdlib>
#define EleType int//方便日后使用
#define Maxsize 1000
using namespace std; //定义结构体
struct sql{
int* elem;
int len;//防止越界访问
}; //初始化
void InitList(sql &l)
{
l.elem=new int [Maxsize];
if(!l.elem) cout<<"申请空间失败"<<endl;
l.len=0;
} //销毁线性表
void DestroyList(sql &l)
{
delete [] l.elem;
l.elem=nullptr;
} int main()
{
sql l;
InitList(l);
return 0; }

数据的插入和删除:

因为在顺序存储所有的数据的存储地址是连续的,所以在插入和删除数据时你需要改变后续的所有数据的位置。在插入时把后面的数据往后挪,删除时把数据向前挪。

void adds(sql &l,EleType target,int sit)
{
if(sit>l.len+1 || sit <1)
{
cout<<"sit is wrong"<<endl;//插入位置错误
exit(0);
}
if(l.len+1>Maxsize)
{
cout<<"Too many"<<endl;//存储空间已满
exit(0);
}
//把后面的数据往后挪
for(int i=l.len-1;i>=sit-1;i--)
{
l.elem[i+1]=l.elem[i];
}
l.elem[sit-1]=target;
l.len++;//更新表长
} //删除元素
void DeletElem(sql &l,int sit)
{
if(sit>l.len+1 || sit <1)
{
cout<<"sit is wrong"<<endl;
exit(0);
}
for(int i=sit-1;i<l.len;i++)
{
l.elem[i]=l.elem[i+1];
}
l.len--;//更新表长
}

其他操作:

查找和更改:

//查找
int finding(sql l,EleType target)
{
for(int i=0;i<l.len;i++)
{
if(l.elem[i]==target) return i+1;
}
return 0;
} //更改
void Changing(sql& l,int sit,EleType target)
{
if(sit>l.len+1 || sit <1)
{
cout<<"sit is wrong"<<endl;
exit(0);
}
l.elem[sit-1]=target;
}

清空、获取长度、判断是否为空:

//清空线性表
void ClearLine(sql &l)
{
l.len=0;
} //获取线性表的长度
int Getlen(sql l)
{
return l.len;
} //判断线性表是否为空
bool IsEmpty(sql l)
{
if(l.len==0) return true;
return false;
}

完整代码

#include<iostream>
#include<cstdlib>
#define Maxsize 1000
#define EleType int//方便日后使用
using namespace std; //创建结构体
struct sql{
EleType* elem;//创建一个指针
int len;
}; //初始化
void InitList(sql &l)
{ l.elem=new EleType [Maxsize];
if(!l.elem) cout<<"申请空间失败"<<endl;
l.len=0;
} //输出
void print(sql l)
{
for(int i=0;i<l.len;i++)
{
cout<<l.elem[i]<<" ";
}
cout<<endl;
} //插入
void adds(sql &l,EleType target,int sit)
{
if(sit>l.len+1 || sit <1)
{
cout<<"sit is wrong"<<endl;
exit(0);
}
if(l.len+1>Maxsize)
{
cout<<"Too many"<<endl;
exit(0);
}
for(int i=l.len-1;i>=sit-1;i--)
{
l.elem[i+1]=l.elem[i];
}
l.elem[sit-1]=target;
l.len++;
} //删除元素
void DeletElem(sql &l,int sit)
{
if(sit>l.len+1 || sit <1)
{
cout<<"sit is wrong"<<endl;
exit(0);
}
for(int i=sit-1;i<l.len;i++)
{
l.elem[i]=l.elem[i+1];
}
l.len--;
} //销毁线性表
void DestroyList(sql &l)
{
delete [] l.elem;
} //清空线性表
void ClearLine(sql &l)
{
l.len=0;
} //获取线性表的长度
int Getlen(sql l)
{
return l.len;
} //判断线性表是否为空
bool IsEmpty(sql l)
{
if(l.len==0) return true;
return false;
} //查找
int finding(sql l,EleType target)
{
for(int i=0;i<l.len;i++)
{
if(l.elem[i]==target) return i+1;
}
return 0;
} //更改
void Changing(sql& l,int sit,EleType target)
{
if(sit>l.len+1 || sit <1)
{
cout<<"sit is wrong"<<endl;
exit(0);
}
l.elem[sit-1]=target;
} int main()
{
sql l;
InitList(l);
EleType j=0;
for(int i=1;i<10;i++,j++)
adds(l,j,i);
DeletElem(l,2);
print(l);
return 0; }

​

线性表的顺序存储C++代码的更多相关文章

  1. 线性表的顺序存储C++代码实现

      关于线性表的概念,等相关描述请参看<大话数据结构>第三章的内容, 1 概念   线性表list:零个或多个数据的有限序列.   可以这么理解:糖葫芦都吃过吧,它就相当于一个线性表,每个 ...

  2. 2.2_线性表的顺序存储结构_参考集合ArrayList

    [线性表的顺序存储从结构] 指的是用一段连续的存储单元一次储存线性表的数据元素. [线性表的顺序存储的结构代码 C语言版] #define MAXSIZE 20 /*存储空间初始分配量*/ typed ...

  3. 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...

  4. 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...

  5. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  6. 线性表的顺序存储结构——java

    线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...

  7. C++编程练习(1)----“实现简单的线性表的顺序存储结构“

    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素. 故可以用数组来实现顺序存储结构. 用C++编写的利用数组实现简单的读取.插入和删除功能的线性表. #include< ...

  8. 线性表的顺序存储设计和实现 - API函数实现

    基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 线性表长度加1 获取元素操作 判断线性表是否合法 判断位置是否合 ...

  9. C 线性表的顺序存储实现及插入、删除等操作示例

    一.线性表的定义 线性表(Linear List)是由同一类型元素构成的有序序列的线性结构.线性表中元素的个数称为线性表的长度:线性表内没有元素(长度为0)时,称为空表:表的起始位置称为表头,表的结束 ...

  10. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

随机推荐

  1. 个人电脑公网IPv6配置

    一.前言 自己当时以低价买的阿里ECS云服务器马上要过期了,对于搭建个人博客.NAS这样服务器的需求购买ECS服务器成本太高了,刚好家里有台小型的桌面式笔记本,考虑用作服务器,但是公网IPv4的地址实 ...

  2. 用Python来写个小型购物车程序

    0x1 前言 Python语言能做很多东西的,像数据分析啊.自动化.开发. 爬虫(真的很棒哟,初学者玩很有成就感的啊哈哈)等等还有挺多. 0x2 用Python编写的一个小型购物车程序 import ...

  3. Java7提供的Fork/Join框架实现高并发程序,你会使用吗?

    摘要:Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最 ...

  4. Vue element 自定义表单验证(验证手机号)

    <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" ...

  5. 3D视觉算法初学概述

    背景知识 RGB-D相机 一,基于3DMM的三维人脸重建技术概述 1.1,3D 人脸重建概述 1.2,初版 3DMM 二,视觉SLAM算法基础概述 2.1,视觉里程计 2.2,后端优化 2.3,回环检 ...

  6. Ajax+WCF+MySQL实现数据库部署并调用

    ​ 最近的数据库课程要求将MySQL数据库部署在服务器上,参考了大佬们的博客后,总结一下. 先放上参考的大佬们的博客. [原创经验分享]JQuery(Ajax)调用WCF服务 - 南宫萧尘 - 博客园 ...

  7. S2-015 CVE-2013-2135, CVE-2013-2134

    漏洞名称 S2-015(CVE-2013-2135, CVE-2013-2134) 利用条件 Struts 2.0.0 - Struts 2.3.14.2 漏洞原理 原理一:一旦配置通配符*,访问 n ...

  8. java基础篇——异常

    异常的三种类型 1.检查型异常:通常是由用户错误或者问题引起,是程序员无法预见的,例如用户要打开一个不存在的文件... 2.运行时异常:最有可能被程序员忽略的异常,可以在编译时被忽略,例如无限递归调用 ...

  9. 旋转卡壳(求凸包直径)学习笔记 | 题解 P1452 [USACO03FALL]Beauty Contest G /【模板】旋转卡壳

    前言 旋转卡壳(Rotating Calipers)可以在凸包上维护许多有用的信息,最常见的就是凸包直径(平面最远点对). 注意:本文不介绍所谓的 "人类智慧" 乱搞做法. 算法流 ...

  10. P5380 [THUPC2019]鸭棋

    题面 查看题面 题目背景 鸭棋是一种风靡鸭子界的棋类游戏.事实上,它与中国象棋有一些相似之处,但规则不尽相同.在这里,我们将为你介绍鸭棋的规则. 鸭棋在一个 \(10\times 9\)(\(10\) ...