顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

接下来看一下顺序表的基本操作:

1.顺序表结构体定义:

#define ELEM_SIZE 100   //顺序表中元素的个数
typedef int ELEMTYPE;
typedef struct Seqlist
{ELEMTYPE data[ELEM_SIZE];ELEMTYPE last;       //顺序表的长度}SeqList,*PSeqlist;

2.顺序表所要实现的功能:

void Init_List(PSeqlist pl);//对顺序表进行初始化操作
int InsertList(PSeqlist pl,int pos,ELEMTYPE val);//插入
int DeleteList(PSeqlist pl,int pos);//按位置删除
int deleteList(PSeqlist pl,int val);//按值删除
void clear(PSeqlist pl);//清空
bool IsFull(PSeqlist pl);//判满
bool IsEmpty(PSeqlist pl);//判空
void Show(PSeqlist pl);//打印

3.具体的代码实现如下:

#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define MAXSIZE 2000
#include"SequenList.h"void Init_List(PSeqlist pl)//进行对顺序表进行初始化
{assert(pl!=NULL);pl->last=0;//使顺序表开始的时候长度为0;
}
//按位置进行对其顺序表中插入元素
int InsertList(PSeqlist pl,int pos,int val)
{assert(pl != NULL);if(pos<0 || pos>MAXSIZE || IsFull(pl))//先判断插入的位置是否合法和顺序表是否已经满了;{return -1;}for(int i=pl->last;i>=pos;i--)//找到插入的那个位置{pl->data[i+1]=pl->data[i];//将后面的每个数据向后移一位;}pl->data[pos]=val;pl->last=pl->last+1;//最后将顺序表的长度加1;return 1;
}按位置进行删除
int DeleteList(PSeqlist pl,int pos)
{assert(pl != NULL);if(pos<1 || pos>pl->last || IsEmpty(pl))//判断删除的位置是否合理和顺序表是否为空{return -1;}else{for(int i=pos;i<pl->last;i++){pl->data[i-1]=pl->data[i];//将后面的每个数据向前移一位;}}pl->last-=1;return 1;
}
按值删除
int deleteList(PSeqlist pl,int val)
{assert(pl != NULL);for(int i=pl->last-1;i>=0;i--){if(pl->data[i] == val)//找到删除的值的位置{for(int j=i;j<pl->last-1;j++)//{pl->data[j]=pl->data[j+1];//将后面的每个数据向前移一位;}pl->last-=1;}}return 1;
}
void clear(PSeqlist pl)//清空顺序表操作
{pl->last=0;
}
bool IsFull(PSeqlist pl)//对顺序表进行判满操作
{return pl->last == MAXSIZE;
}
bool IsEmpty(PSeqlist pl)//对顺序表进行判空操作
{return pl->last == 0;
}
void Show(PSeqlist pl)//打印顺序表中的内容
{for(int j=0;j<pl->last;j++){printf("%d  ",pl->data[j]);}printf("\n");
}

5.主函数:

int main()
{Seqlist sl;Init_List(&sl);IsFull(&sl);InsertList(&sl,0,10);InsertList(&sl,1,20);InsertList(&sl,2,30);InsertList(&sl,3,20);InsertList(&sl,4,20);InsertList(&sl,5,50);InsertList(&sl,6,10);/*for(int i=0;i<10;i++){InsertList(&sl,i,i+10);}*/Show(&sl);DeleteList(&sl,2);deleteList(&sl,20);Show(&sl);clear(&sl);Show(&sl);return 0;
}

总结:

原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度

优点:存取速度高效,通过下标来直接存储

缺点:1.插入和删除比较慢,2.不可以增长长度

比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序

顺序表的基本操作(详细、全面)相关推荐

  1. Tsai笔记:C++学习随性笔记(2)—— 数据结构:顺序表的基本操作

    Tsai笔记:C++学习随性笔记(2)-- 数据结构:顺序表的基本操作 Tsai三步.(第一步,功能说明.第二步,结果图显示.第三步,代码展示) 第一步,功能说明. 1.线性表的顺序存储 线性表的顺序 ...

  2. C++:顺序表的基本操作(待完善)

    根据命令提示进行顺序表的基本操作(待完善) #include<iostream> #include<algorithm> using namespace std; #defin ...

  3. PTA 顺序表的基本操作

    原题有50分,这个答案有45分,欢迎指出不足 ;) 6-2 顺序表基本操作 (50 分) 实现顺序表的基本操作,如初始化.插入.删除.输出等. 注意:顺序表中可有重复元素值. 要求:写出三个基本操作函 ...

  4. 【头歌】顺序表的基本操作

    第1关:顺序表的插入操作 任务描述 本关任务:编写顺序表的初始化.插入.遍历三个基本操作函数. 相关知识 顺序表的存储结构 顺序表的存储结构可以借助于高级程序设计语言中的数组来表示,一维数组的下标与元 ...

  5. 编程实现顺序表的基本操作

    void InitList(SqList &L)//建立空顺序表函数 voidListInsert(SqList &L, int i, ElemType e) //在顺序表中第i个位置 ...

  6. 线性表之顺序表的基本操作

    线性表的定义 线性表是具有相同数据类型的 n ( n > = 0 ) n(n>= 0) n(n>=0)个数据元素的有限序列,其中 n n n为表长,当 n = 0 n=0 n=0时线 ...

  7. 线性表-顺序表的基本操作

    线性表的定义和特点 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列 线性表中元素的个数n(n≥0)称为线性表的长度 空表:n=0 对于非空的线性表或线性结构,特点为: 存在唯一的一个被称作& ...

  8. 简单认识顺序表的基本操作

    文章目录 顺序表 1. 顺序表的概念 2. 顺序表的基本操作 2.1 顺序表的基本属性 2.2 增加元素操作 2.2.1 头插 2.2.2 尾插 2.2.3 按位置插入元素 2.3 删除元素操作 2. ...

  9. 顺序表的基本操作 SCAU8576、SCAU8577、SCAU8578

    //此项目功能:完成顺序表的基本操作及OJ给出的三道题:8576.8577.8578 #include <stdio.h> #include <malloc.h> #defin ...

最新文章

  1. SVN如何将版本库url访问地址中的https改为http
  2. mysql 用户命令_MySQL命令行新建用户
  3. 每日程序C语言41-带头结点的头插法创建链表
  4. 多多进宝推广团队_多多进宝推广形式及推手寻找、佣金结算方式是怎样的?
  5. 安卓日志点击无反应_长生之路游戏原型开发日志(三十七)
  6. Openstack Python 源代码的路径
  7. 团队项目冲刺第二天进度
  8. 深度学习自学(十五):人脸识别数据预处理方法
  9. html如何格式化时间,js 日期时间的格式化
  10. 老徐和阿珍的故事:强引用、软引用、弱引用、虚引用,傻傻分不清楚
  11. mp4视频怎么转换成华为P10手机适配的分辨率
  12. 华为 15 到 18 级的研发族社招工作岗位内推
  13. PCB后续以及泪滴、敷铜和标识
  14. python兔子繁殖问题_【算法】兔子繁殖之斐波那契数列
  15. 将谷歌网盘的文件搬运到百度网盘
  16. JavaWeb登陆成功后跳转到上一个页面
  17. i5功耗最低的cpu_i5并非必须 教你配高效低功耗游戏平台
  18. stm32外挂spiflash的烧录算法
  19. 相机标定(2): 单目相机标定总结
  20. Visual Studio 2019 和 qt 5.15.1 下 opengl 的运用 - Lighting - 02 - BasicLighting

热门文章

  1. 如何看待测试过程中的漏测发生
  2. 【计算机考研】复试常见问题
  3. java基于微信小程序的驾校报名预约管理系统 uniapp 小程序
  4. 互联网快讯:猿辅导凭优质教学获好评;粉笔科技积极布局打造双核驱动;科创板上市公司突破400家
  5. 2023 年值得关注的 7 大人工智能 (AI) 技术趋势
  6. Conv2d函数详解(Pytorch)
  7. Pytorch中的Conv1d()和Conv2d()函数
  8. 华擎主板bios设置图解_【华擎Z170评测】BIOS设置及超频方法简介_华擎 Z170 超频方程式_主板评测-中关村在线...
  9. 【C++】抽象和类(2)--如何实现类成员函数?
  10. Jmeter——Jmeter之命令行测试