Ⅰ 数据元素之间的关系在计算机中有几种表示方法各有什么特点
2. 数据元素之间的关系在计算机中有几种表扮配旅示方法?各有什么特点?
答:四种表示方法 (1)顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素 间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。 (2)链式存储方式。每个存储结点除包含数据元素信息外还包含一组(至少一个)指针厅凳。指针 反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动态操作(如插入、删除等), 但存储空间开销大(用于指针),另外不能折半查找等。 (3)索引存储方式。除数据元素存储在一地址连续的内存空间外,尚需建立一个索引表,索引 表中索引卖岁指示存储结点的存储位置(下标)或存储区间端点(下标),兼有静态和动态特性。 (4)散列存储方式。通过散列函数和解决冲突的方法,将关键字散列在连续的有限的地址空间 内,并将散列函数的值解释成关键字所在元素的存储地址,这种存储方式称为散列存储。其特点 是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。
Ⅱ 数据的逻辑结构分为哪四种
逻辑结构有四种基本类型:集合结构、线性结构、树状结构和网络结构。
1、集合结构:集合结构的集合中任何两个数据元素之间都没有逻辑关系,组织形式松散。
2、线性结构:线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。
3、培祥树状结构:树配扒搏状结构是一个或多个节点的有限集合。
4、网络结构:网络结构是指通信系统的整体设计,它为网络硬此尺件、软件、协议、存取控制和拓扑提供标准。
(2)集合是顺序存储吗扩展阅读:
线性结构中的结点按逻辑关系依次排列形成一个“锁链”。必存在唯一的一个"第一个元素"和唯一的一个"最后的元素"。除最后元素之外,其它数据元素均有唯一的"后继";除第一元素之外,其它数据元素均有唯一的"前驱"。
树形结构具有分支、层次特性,其形态有点象自然界中的树。网络结构广泛采用的是国际标准化组织(ISO)在1979年提出的开放系统互连(OSI-Open System Interconnection)的参考模型。
Ⅲ 什么是数据结构
要想知道什么是数据结构?首先得知道数据是什么?数据是对客观事务的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号总称。那为何加上XX“结构”XX两字?
数据元素是数据的基本单位,而茄磨册任何问题中,数据元素都不是独立存在的,它们之间总是存在着某种关系,这种数据元素之间的关系我们称之为结构。
因此,我们有了以下定义:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高颤宏的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
简单讲,数据结构就是组织,管理以及存储数据的方式。虽然理论上所有的数据都可以混杂,或者糅合,或者饥不择食,随便存储,但是计算机是追求高效的,如果我们能了解数据结构,找到较为适合当前问题场景的数据结构,将数据之间的关系表现在存储上,计算的时候可以较为高效的利用适配的算法,游腔那么程序的运行效率肯定也会有所提高。
常用的4种数据结构有:
集合:只有同属于一个集合的关系,没有其他关系。
线性结构:结构中的数据元素之间存在一个对一个的关系
树形结构:结构中的数据元素之间存在一个对多个的关系
图状结构或者网状结构:图状结构或者网状结构。
数据存储结构指的是逻辑结构在计算机存储空间中的存放形式(也称为物理结构)。一般来说,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等。顺序存储:用一组地址连续的存储单元依次存储集合的各个数据元素,可随机存取,但增删需要大批移动。链式存储:不要求连续,每个节点都由数据域和指针域组成,占据额外空间,增删快,查找慢需要遍历。索引存储:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。检索快,空间占用大。哈希存储:将数据元素的存储位置与关键码之间建立确定对应关系,检索快,存在映射函数碰撞问题。
Ⅳ 集合内的数字要有顺序吗
不睁唯需要
,集合的概念中,说得很清楚,
集合中的元素,不存拍早册在顺序问题。
所以很多书上,为了让大家明确这点,还往往举例比方说{1,2,3}和{3,1,2}、{1,3,2}等,都是表示同一个集合。而且这些集合的表示方法都是正确的。不存在{1,2,3}或{3,2,1}比{3,1,2}、{1,3,2}更好,更正确的说法。都是一袭宏样的正确,一样的好。
Ⅳ 顺序存储方式只能用于存储线性结构吗
不是。
顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。
数据的逻辑结构包括线性结构、树、图、集合这四种,在线性结构里面又有线性表、栈、队列等等。而数据的存储结构只有两种:顺序存储结构和链式存储结构,这两种存储结构,前面一个是利用数据元素在存储器中的相对位置表示其逻辑结构,另外一个是用指针来表示其逻辑关系。
顺序存储结构
的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
Ⅵ 线性存储结构就是顺序存储结构吗线性表是线性存储结构吗
不是,他们的关系可以如图所示。线性表包括顺序存储结构和链式存储结构。
拓展资料:
线性表的划分是从数据的逻辑结构上进行的。线性指的是在数据的逻辑结构上是线性的。即在数据元素的非空有限集中
(1)存在唯一的一个被称作“第一个”的数据元素,(2)存在唯一的一个被称作“最后一个”的数据元素,(3)除第一个外,集合中的每个数据元素均只有一个前继元素,(4)除最后一个外,集合中的每个数据元素均只有一个后继元素。
那么对于线性表,从存储结构上分,可以有顺序存储结构和链式存储结构。顺序存储结构包括顺序表、顺序队列和顺序栈;链式存储结构包括链表、链队列和链栈。
Ⅶ java中list存储有顺序吗
list是有顺序的,hashset是无序的,treeset是有序的
Ⅷ 线性存储结构就是顺序存储结构吗线性表是线性存储结构吗
一、具体分析
1、线性结构的数据在存储结构方面,既可能是顺序存储,也可能是链式存储。
2、线性表是线性结构,也是顺序存储结构
3、数据的逻辑结构包括线性结构、树、图、集合这四种,在线性结构里面丛山又有线性表、栈、队列等等。
4、而数据的存储结构只有两种:顺序存储结构和链饥猜式存储结构,这两种存储结构,前面一个是利用数据元素在存储器中的相对位置表示其逻辑结构,另外一个是用指针来表示其逻辑关系。
二、拓展资料:关于数据结构(资料来源:网页链接)
1、数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
2、数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具渗肢中体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
3、数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与个数据项对应的子位串称为数据域(data field)。因此,节点是数据元素的机内表示(或机内映像)。
4、意义:在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
Ⅸ 数据结构都有哪些分类呢
常用的数据结构有4种:
集合。2.线性结构。3.树形结构。4.图状结构;
1.集合
树形结构是一层次的嵌套结构。 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树。 左子树和右子树又有自己的子树。
4.图状结构
图状结构,简称“图”,是一种复杂的数据结构。图状结构中,每个结点的前驱结点数和后续结点数可以任意多个。数据元素间的关系是任意的。其他数据结构(如树、线性表等)都有明确的条件限制,而图形结构中任意两个数据元素间均可相关联。
Ⅹ 集合的存储形式可采用顺序表,集合中元素的类型为整型量。
#include "stdafx.h"
#define ListInitSize 100
#define ListIncreaseSize 10
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define ElemType int
#define PRINT_LIST( list ) for( int i = 0; i < list.length; i++ ) \
printf( "%d ", list.elem[i] ); \
printf( "\r\n" ); \
typedef struct SqList
{
ElemType *elem;
int length;
int listSize;
}SqList;
int CreateList( SqList &L )
{
//create...
if( !(L.elem = ( ElemType* )malloc( sizeof( ElemType ) * ListInitSize ) ) )
exit( OVERFLOW );
L.length = 0;
L.listSize = ListInitSize;
return OK;
}
int DestroyList( SqList &L )
{
if( L.elem )
{
free( L.elem );
L.elem = NULL;
}
return OK;
}
int ListInsert( SqList &L, int pos, ElemType e )
{
int i = 0;
ElemType* tmp = NULL;
if( pos < 0 || pos > L.length )
return ERROR;
// need to realloc memory...
if( L.length >= L.listSize )
{
L.listSize += ListIncreaseSize;
if( !(tmp = ( ElemType* )realloc( L.elem, sizeof( ElemType ) * L.listSize ) ) )
exit( OVERFLOW );
L.elem = tmp;
}
for( i = L.length-1; i >= pos; i-- )
L.elem[i+1] = L.elem[i];
L.elem[pos] = e;
L.length++;
return OK;
}
// delete the posth element. index from 0 to L.length-1
int ListDelete( SqList &L, int pos )
{
int i = 0;
if( pos < 0 || pos >= L.length )
return ERROR;
// here memory re-alloc is not considered...
for( i = pos; i < L.length; i++ )
{
L.elem[pos] = L.elem[pos+1];
}
L.length--;
return OK;
}
int Compare()
{
int i = 0, j = 0, p = 0;
ElemType elmA, elmB, elmCross, elmMinus;
SqList A, B, CROSS, MINUS;
CreateList( A );
CreateList( B );
CreateList( CROSS );
CreateList( MINUS );
ListInsert( A, 0, 1 );
ListInsert( A, 1, 3 );
ListInsert( A, 2, 5 );
ListInsert( B, 0, 3 );
ListInsert( B, 1, 6 );
ListInsert( B, 2, 7 );
// cross
p = 0;
for( i = 0; i < A.length; i++ )
{
elmA = A.elem[i];
for( j = 0; j < B.length; j++ )
{
elmB = B.elem[j];
if( elmB == elmA )
ListInsert( CROSS, p++, elmB );
}
}
// minus
for( i = 0; i < A.length; i++ )
ListInsert( MINUS, i, A.elem[i] );
for( i = 0; i < MINUS.length; i++ )
{
elmMinus = MINUS.elem[i];
for( j = 0; j < CROSS.length; j++ )
{
elmCross = B.elem[j];
if( elmCross == elmMinus )
ListDelete( MINUS, i );
}
}
printf( "A is : " );
PRINT_LIST( A );
printf( "B is : " );
PRINT_LIST( B );
printf( "A cross B is : " );
PRINT_LIST( CROSS );
printf( "A minus B is : " );
PRINT_LIST( MINUS );
return OK;
}
int main(int argc, _TCHAR* argv[])
{
Compare();
getchar();
return 0;
}