Ⅰ 线性表就是顺序存储的表 这句话对吗
不对,线性表有顺序存储的,也有链式存储的,书上会有介绍。
Ⅱ 线性表和顺序表的区别
线性表仅仅是逻辑上的定义而已,即具有相同特性数据元素的有限序列,(比如一个字符数组或者一个整型数组 再或者链表 )并不是说,线性表就一定是链表或者顺序表(链表和顺序表都满足线性表的定义,只是实现方式不一样,顺序表采用顺序存储方式,内存中开辟的地址是连续的,而链表采用链式存储的方式,地址是可以不连续的)两者存储方式各有优缺点,看情况而定。
下面是数据结构中对于线性表的一段定义与操作
代码来源线性表--顺序表的定义与操作示例
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineMAXSIZE20/*存储空间初始分配量*/
typedefintElemType;/*ElemType类型根据实际情况而定,这里假设为int*/
typedefstruct
{
ElemTypedata[MAXSIZE];/*数组,存储数据元素,最大值为MAXSIZE*/
intlength;/*线性表当前长度*/
}SqList;
//顺序表的初始化
SqListInit()
{//构造一个空的线性表L,时间复杂度O(1)
SqListL;//定义一个顺序表
L.length=0;//顺序表的长度为0
returnL;//返回空顺序表
}
//顺序表的建立
SqListCreate(SqListL)
{
inti;
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
{
L.data[i]=rand()%100;
L.length++;
}
returnL;
}
/*初始条件:顺序线性表L已存在,1≤i≤ListLength(L)*/
/*操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始*/
ElemTypeGetElem(SqListL,inti)
{//
if(i<1||i>L.length)
{
printf("查找位置错误! ");//检查查询位置是否合法
return0;
}
else
returnL.data[i-1];
}
//顺序表的插入
SqListSqListInsert(SqListL,inti,ElemTypex)
{//在顺序表中的第i个位置插入元素x
if(L.length==MAXSIZE)
printf("表已经满了 ");//插入时,必须检查表是否已经满了。否则会出现溢出错误
elseif(i<1||i>L.length)
printf("插入位置错误 ");//判断插入位置的有效性
intj;
for(j=L.length-1;j>=i-1;j--)//第i个位置元素逐个后移
L.data[j+1]=L.data[j];
L.data[i-1]=x;//插入元素x
L.length++;//顺序表长度增1
returnL;
}
SqListSqListDelete(SqListL,inti)
{//删除顺序表中的第i个位置的元素
if(i<1||i>L.length)
printf("删除位置错误 ");//检查删除位置是否合法
intj;
for(j=i-1;j<L.length;j++)
L.data[j]=L.data[j+1];//将第i个位置之后的元素前移
L.length--;//顺序表长度-1
returnL;
}
intmain()
{
SqListnmList;
nmList=Init();
nmList=Create(nmList);
intfind;
intfound;
intpos;
ElemTypevalue;
charopp;
inti;
printf("顺序表初始化为:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" 1.查看顺序表 2.查找 3.插入 4.删除 0.退出 请选择你的操作: ");
while(opp!='0'){
scanf("%c",&opp);
//printf(" 1.查找 2.插入 3.排序 0.退出 请选择你的操作: ");
switch(opp){
case'1':
printf(" 查看顺序表:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" ");
break;
case'2':
printf(" 进入查找功能,请问需要查找第几个元素:");
scanf("%d",&find);
printf("%d",find);
found=GetElem(nmList,find);
printf("第%d个值为%d",find,found);
printf(" ");
break;
case'3':
printf("进入插入功能,请输入插入元素位置:");
scanf("%d",&pos);
printf("请输入插入元素的值:");
scanf("%d",&value);
nmList=SqListInsert(nmList,pos,value);
printf(" 插入元素后顺序表为:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" ");
break;
case'4':
printf("进入删除功能,请输入删除元素位置:");
scanf("%d",&pos);
nmList=SqListDelete(nmList,pos);
printf(" 删除元素后顺序表为:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" ");
break;
case'0':
exit(0);
}
}
}
Ⅲ 线性表的顺序存储的缺点
线性顺序存储的缺点:(1)插入或删除的运算效率很低。在顺序存储的线性表中,插入或删除数据元素时需要移动大量的数据元素;(2)线性表的顺序存储结构下,线性表的存储空间不便于扩充;(3)线性表的顺序结构不便于对存储空间的动态分配。
Ⅳ 顺序表是线性表的什么存储结构
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
Ⅳ 线性表的顺序存储结构是随机存取的
可以参考下面几种解释
1、解释一:
顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取,与此相对 链式存储结构的存储地址不一定连续,只能通过第个结点的指针顺序存取
2、解释二:
线性表的顺序存储结构可以通过线性表的首址加偏移的方法计算出来第i个数据的位置a+i*sizeof(单个结构)而线性表的链式存储结构要访问第i个数据,就必须先访问前面的i-1个数据
(5)线性表顺序存储表扩展阅读:
线性表主要由顺序表示或链式表示,在实际应用中,常以栈、队列、字符串等特殊形式使用,顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像,顺序存储结构是随机存取的。
链式表示指的是用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构。它的存储单元可以是连续的,也可以是不连续的。
Ⅵ 数据结构之有序线性表的顺序存储结构
指线性表中的元素按值或者关键字的大小先后有序(升序或者降序)。
之前讲了线性表的顺序存储结构 数据结构之线性表的顺序存储结构
有序线性表是在之前的基础上构建的,相对于之前的线性表的操作,有序线性表增加了如下操作:
有序线性表的接口SortedList
有序线性表的实现类,实现了SortedList和继承了SequenceList( 数据结构之线性表的顺序存储结构 )
插入方法
删除方法
查找方法
测试类
Ⅶ 线性表的顺序存储结构是以什么来表示数据元素之间的逻辑关系的
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
线性表主要由顺序表示或链式表示。在实际应用中,常以栈、队列、字符串等特殊形式使用。
顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequential mapping)。它以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
由此得到的存储结构为顺序存储结构,通常顺序存储结构是借助于计算机程序设计语言(例如c/c++)的数组来描述的。
顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
推荐课程:C语言教程。
线性表顺序存储结构的结构代码:
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length; // 线性表当前长度
} SqList;
顺序存储结构封装需要三个属性:
存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置。
线性表的最大存储容量:数组的长度MaxSize。
线性表的当前长度:length。
注意:数组的长度与线性表的当前长度需要区分一下:数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。而线性表的当前长度是线性表中元素的个数,是会变化的。
线性表顺序存储结构的优缺点
线性表的顺序存储结构,在存、读数据时,不管是哪个位置,时间复杂度都是O(1)。而在插入或删除时,时间复杂度都是O(n)。
这就说明,它比较适合元素个数比较稳定,不经常插上和删除元素,而更多的操作是存取数据的应用。
优点:
无须为表示表中元素之间的逻辑关系而增加额外的存储空间。
可以快速地存取表中任意位置的元素。
缺点:
插上和删除操作需要移动大量元素。
当线性表长度变化较大时,难以确定存储空间的容量。
容易造成存储空间的“碎片”
Ⅷ 顺序存储的有序线性表 有序线性链表
“顺序存储”表明该线性表使用顺序存储结构(即数组)
“有序”表明线性表内元素排列有序,如“1,2,3,4,5”
“链表”表明该线性表采用链式存储结构,即每个元素的数据类型都是一个结构体,这个结构体里面又包含指向下一个位置的结构体的地址
顺序存储结构的线性表的类型定义如下:
#define
MAXSIZE
100
‖顺序表的最大容量
typedef
struct
{ElemType
data[MAXSIZE];
‖存放线性表的数组
int
last;
‖last是线性表的长度
}SeqList;
链式存储线性表的结点定义:
typedef
struct
Node
{ElemType
data;
struct
Node
*next;
}LNode,*LinkedList;