线性表的顺序存储结构简称为顺序表。线性表的顺序存储结构是把线性表中的元素中的元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的存储空间中,它直接将线性表的逻辑结构映射到存储结构上,既方便理解,又容易实现。
 在C/C++语言中,借助数组类型来实现顺序表,也就是说,用数组存放线性表的元素及其逻辑关系,数组的基本类型就是线性表中元素的类型,数组的大小要大于等于线性表的长度,否则该数组不能存放对应线性表的所有元素。所以当线性表长度小于数组大小时,该数组有一部分空闲空间。
顺序表的实现:
1.设置顺序表的长度

#include<stdio.h>
#include<stdlib.h>
//定义线性表最长长度
#define MaxSize 50

2.声明线性表的顺序存储类型

typedef int ElementType;
typedef struct SquentialListStruct
{ElementType data[MaxSize];int length;
} SqList;

3.初始化顺序表

void InitList(SqList * &L)
{L = (SqList*)malloc(sizeof(SqList));              //分配存放顺序表的空间L->length = 0;                                      //将顺序表长度设置为0
}

4.创建顺序表

void CreateList(SqList * &L, ElementType a[], int n) //由a中的第n个元素建立顺序表
{int i = 0, k = 0;                                    //k表示L中的元素的个数,初始值为0L = (SqList*)malloc(sizeof(SqList));             //分配存放顺序表的空间while (i<n)                                          //i扫描数组a{L->data[i] = a[i];                             //将元素a[i]存放到L中k++;i++;}L->length = k;                                       //设置L的长度为k
}

5.销毁顺序表

void destoryList(SqList * &L)
{free(L);                                           //释放L所指的顺序表空间
}

6.判断顺序表是否为空

bool ListEmpty(SqList *L)
{return (L->length ==0);
}

7.输出顺序表

void DispList(SqList *L)
{for (int i=0;i<L->length;i++)                     //扫描顺序表输出各元素的值{printf("%d ",L->data[i]);}printf("\n");
}

8.求顺序表的长度

int ListLength(SqList *L)
{return (L->length);
}

9.获取顺序表中某个元素值

bool GetElem(SqList *L, int i, ElementType &e)
{if (i<1 || i>L->length)return false;                                  //参数i错误时返回falsee = L->data[i - 1];                                  //取出元素return true;                                      //成功找到元素时返回true
}

10.按元素值查找

int LocateElem(SqList *L,ElementType e)
{int i = 0;while (i < L->length && L->data[i] != e)i++;                                            //查找元素eif (i >= L->length)return 0;                                      //未找到时返回0elsereturn i + 1;                                 //找到后返回其逻辑序号
}

11.插入数据元素

bool ListInsert(SqList * &L,int i,ElementType e)
{int j;if (i<1 || i>L->length + 1)return false;                               //参数i错误时返回falsei--;                                         //将顺序表逻辑序号转化为物理序号for (j = L->length; j > i; j--)L->data[j] = L->data[j - 1];              //将data[i]及其后面的元素向后移动一个位置L->data[i] = e;                                    //插入元素eL->length++;                                    //顺序表长度+1return true;                                  //成功插入返回true}

12.删除数据元素

bool ListDelete(SqList * &L, int i, ElementType &e)
{int j;if (i<1 || i>L->length + 1)return false;                               //参数i错误时返回falsei--;                                         //将顺序表逻辑序号转化为物理序号e = L->data[i];for (j = i; j < L->length - 1; j++)L->data[j] = L->data[j + 1];                //将data[i]及其后面的元素向前移动一个位置L->length--;                                    //顺序表长度-1return true;                                   //成功删除返回true
}

13.主函数

int main()
{SqList *Li;ElementType e1,e2;ElementType dat[] = {1,4,6,8,34,78,342};InitList(Li);CreateList(Li, dat, 7);printf("顺序表元素:");DispList(Li);printf("顺序表长度:%d\n", ListLength(Li));GetElem(Li, 2, e1);printf("顺序表第 2 个元素为:%d\n", e1);printf("顺序表是否为空:%s\n", ListEmpty(Li) ? "true" : "false");printf("顺序表元素 6 在第 %d 位\n", LocateElem(Li,6));ListInsert(Li,2,86);printf("在第 2 位插入元素 86 后顺序表:");DispList(Li);ListDelete(Li, 8, e2);printf("删除顺序表第 8 位后顺序表:");DispList(Li);getchar();return 0;
}

程序运行结果:

顺序表元素:1 4 6 8 34 78 342
顺序表长度:7
顺序表第2个元素为:4
顺序表是否为空:false
顺序表元素 6 在第 3 位
在第2位插入元素 86 后顺序表:1 86 4 6 8 34 78 342
删除顺序表第8位后顺序表:1 86 4 6 8 34 78

下一篇:4、线性表的链式存储结构(单链表)

3、线性表的顺序存储结构(顺序表)相关推荐

  1. 线性表:2.线性表的顺序存储结构--顺序表及C语言实现

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

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

    什么是线性表? 线性表简称表,是n(n>=0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度,长度为0的表称为空表. 什么是顺序表? 线性表的顺序存储结构称为顺序表. ...

  3. 线性表—顺序存储结构-顺序表

    把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中. 一般分配空间是需要一些冗余的. 专门开辟一块空间线性表有n个数据 占用空间:n*sizeof(El ...

  4. 用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍

    我们先来想一想什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之 ...

  5. 数据结构与算法(2-1)线性表之顺序存储(顺序表)

    顺序表用数组存储数据元素(可以是结构体数组,也可以是结构体内的元素数组),插入和删除等等也是类似数组的操作. 顺序表优势: 1.无须为表示表中元素之间的逻辑关系而增加额外的存储关系,就是直接的顺序: ...

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

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

  7. 什么是线性表?什么是线性表的顺序存储结构?什么是线性表的链式存储结构?

    1.线性表是最简单也是最常用的一种数据结构.线性表的例子不胜枚举,例如,英文字母表就是一个线性表,表中的英文字母是一个数据元素. 2.线性表的定义:线性表是具有相同特性的数据元素的一个有限序列. 3. ...

  8. 线性表的顺序存储结构及实现

    线性表的顺序存储结构定义 一.线性表的介绍 线性表是最基本.最简单.也是最常用的一种数据结构. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的 ...

  9. c语言实现顺序存储程序,线性表的顺序存储结构动态态分配C语言实现

    线性表的顺序存储结构动态态分配C语言实现 线性表的顺序存储结构动态态分配C语言实现 初始化执行期间通过malloc函数为数组申请空间,程序运行期间若空间不够可通过realloc函数在保留原存储值的前提 ...

最新文章

  1. python中pos的用法_Python正则式的基本用法
  2. 段错误、内存泄漏、内存溢出、堆溢出、栈溢出
  3. Android 获取触摸点坐标,判断滑动方向,滑动距离,滑动速度
  4. C++(5)--运算符、表达式、条件结构(if, switch)
  5. java.lang.math.abs_java.lang.StrictMath.abs(int a)方法实例
  6. 【Python】:拓展Queue实现有序不重复队列
  7. opencv2.4.7.2画圆,画十字,画矩形
  8. NumPy库--数组的索引和切片
  9. 2月29日,四年一遇的日子!
  10. springboot+nodejs+vue+Elementui高校课外学科竞赛管理系统
  11. tiny-emitter 源码解析
  12. 迷途Emlog模板全站好看的透明变色模板+源码
  13. 无法访问windows安装服务_最好用的内外网测速工具, speedtest 服务器搭建指南
  14. 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统,请用数据流图描述下面系统的业务流程。
  15. 多重网格法-松弛迭代法-二维泊松方程-python实现
  16. 为micropython添加模块(2)-类模块
  17. 来自北京大学NOIP金牌选手yxc的常用代码模板2——数据结构
  18. Python——输出大写英文字母
  19. PingPong福贸外贸收款账户是如何收费的?
  20. 联想yoga710_联想Yoga 2 Pro:笔记本电脑第一,瑜伽士第二

热门文章

  1. 解决Duo13内置博通蓝牙和博通Wifi冲突
  2. 华为云服务之存储服务
  3. STM32F103C8T6控制LED灯轮流闪烁
  4. html5团队特效,CSS3团队成员介绍卡片特效
  5. 计算机专业男人喜欢什么样的女人,说实在的,其实男人真正喜欢的女人,就三个特征...
  6. 以指标驱动业务决策,Kyligence 亮相 Gartner IT Symposium/Xpo™ 峰会
  7. 用树莓派做linux电视盒子,用树莓派制造一台“口袋电视”
  8. Caysn打印机安卓平台开发包接口说明文档及打印示例程序_20170609
  9. MTK处理器手机 解锁Bootloader 教程
  10. 阿里ET大脑如何帮助养猪产业提升PSY从20到32?