顺序存储结构能存储非线性存储结构结构吗

为什么说二叉树是非线性存储结构?不是说二叉树可以顺序存储和链式存储吗?感觉顺序存储是线性的呀?怎么_百度知道
为什么说二叉树是非线性存储结构?不是说二叉树可以顺序存储和链式存储吗?感觉顺序存储是线性的呀?怎么
感觉顺序存储是线性的呀为什么说二叉树是非线性存储结构?怎么判断是不是线性非线性?不是说二叉树可以顺序存储和链式存储吗
顺序是顺序,两者不是一个概念。线性是指一个节点只有一个子节点,线性是逻辑结构,或二叉树一个节点后有多个子节点,且子节点不能相互联系,顺序是储存结构,而树线性是线性
其他类似问题
为您推荐:
存储结构的相关知识
其他1条回答
线性是数组那样,链就是有节点,,
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您的举报已经提交成功,我们将尽快处理,谢谢!
我的回答是:不能。非线性是不按顺序的链式结构吧,不能顺序存储吧。
复制的有意思伐。。。解释你自己看上面那个复制的,不多说了。
数据的逻辑结构也称为数据结构,分两大类:线性结构和非线性结构。
存储结构分四类:顺序存储、链接存储、...
(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'【图文】线性表及其顺序存储结构_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
线性表及其顺序存储结构
上传于||暂无简介
大小:200.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢数据结构习题!一、选择题1.从物理结构上可以把数据结构分为( )两大类。A.动态结构、静态结构
B.顺序存储结构、链式存储结构
C.线性结构、非线性结构
D.基本结构、构造结构2.下述哪一条是顺序存储结构的优点?(
)A.物理上相邻的元素在逻辑上也相邻
B.插入运算方便
C.删除运算方便
D.可方便地用于各种逻辑结构的存储表示3.下面关于线性表的叙述中,错误的是哪一个?( )A.线性表采用顺序存储,必须占用一段连续的存储单元。B.线性表采用顺序存储,便于进行插入和删除操作。C.线性表采用链式存储,不必占用一片连续的存储单元。D.线性表采用链式存储,便于进行插入和删除操作。4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(
)存储方式最节省时间。A.顺序表
C.带头结点的双循环链表
D.单循环链表5.6个元素按照6,5,4,3,2,1 的顺序进栈,下列哪一个不是合法的出栈序列?( )A. 5,4,3,6,1,2
B. 4,5,3,1,2,6
C. 3,4,6,5,2,1
D. 2,3,4,1,5,66. 一个递归算法必须包括(
)。A. 递归部分
B. 终止条件和递归部分
C. 循环部分
D. 终止条件和循环部分7. 执行完下列语句段后,i值为:(
f(int x) { return
((x>0) ? x* f(x-1):2);}
i =f(f(1));A.2
D. 无限递归8. 若用front和rear分别表示循环队列的队头元素和队尾元素在数组中的下标,则队列为空时有( )。A.
rear=front-1
B. rear=front+1
rear=front
D. 不能确定9. 栈和队都是(
)A.顺序存储的线性结构
B. 链式存储的非线性结构C. 限制存取点的线性结构
D. 限制存取点的非线性结构10. 一般来说,最快的排序算法是(
)。A、归并排序
B、快速排序
C、插入排序
D、Shell排序
1、A(这是数据结构前言里的知识);2、D(由于是线性结构,不方便于插入和删除;在逻辑上相邻,在物理上不一定相邻);3、B(同2的解释);4、A5、C(对于栈的操作必须是FIFO(先进后出)的原则,在C中,6比5先进栈,但是却比5先出栈,这是不合法的);6、B(递归的三要素:开始条件 递归部分 终止条件)7、B(由题目可知f(0)=2;f...
1B2A3B4C5C6B7B8C9C10B
1 B2 A3 B4 ?5 C6 D7 B8 C9 C10 B参考前两者的答案和自己的想法·~我感觉一楼那个虽然解释的很多。。但是不怎么准。。
XIDIAN 西电计算机系大一 其他回答的答案有误一、选择题1.从物理结构上可以把数据结构分为( C)两大类。A.动态结构、静态结构
B.顺序存储结构、链式存储结构
C.线性结构、非线性结构
D.基本结构、构造结构2.下述哪一条是顺序存储结构的优点?(
)A.物理上相邻的元素在逻辑上也相邻
B.插入...
为您推荐:
扫描下载二维码数据结构的C++实现之线性表之顺序存储结构 - 数据结构与算法 - 编程入门网
数据结构的C++实现之线性表之顺序存储结构
线性表的数据对象集合为 {a1,a2,....an},每个元素的类型均为Datatype。其中,除第一个元素a1外,每一个元素有且 只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的 关系。
线性表的顺序存储结构的优缺点:
优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间;可以快速地存取表中任一位置的元素O(1)
缺 点:插入和删除操作需要移动大量元素O(n);当线性表长度变化较大时,难以确定存储空间的容量;造成存储空间的&碎片 &
示例程序如下(改编自《大话数据结构》):
#include&iostream&
#define MAXSIZE 20
typedef int ElemT
typedef struct
ElemType data[MAXSIZE];
/* 初始化顺序线性表 */
bool InitList(SqList *ptr)
for (int i = 0 ; i & MAXSIZE; i++)
ptr-&data[i] = 0;
ptr-&length = 0;
bool ListEmpty(SqList Sq)
if (Sq.length == 0)
bool ClearList(SqList *ptr)
for (int i = 0 ; i & ptr-& i++)
ptr-&data[i] = 0;
ptr-&length = 0;
/*用ptr返回Sq中第pos个数据元素的值,注意pos是指位置,第1个位置的数组是从0开始 */
bool GetElem(SqList Sq, int pos, ElemType *ptr)
if (Sq.length == 0 || pos & 1 || pos & Sq.length)
*ptr = Sq.data[pos - 1];
/*返回Sq中第1个与Elem满足关系的数据元素的位序,若这样的数据元素不存在,则返回值为0 */
int Locate(SqList Sq, ElemType Elem)
for (int i = 0; i & Sq. i++)
if (Sq.data[i] == Elem)
return i + 1;
/*在Sq中第pos个位置之前插入新的数据元素Elem,L的长度加1*/
bool ListInsert(SqList *ptr, int pos, ElemType Elem)
if (ptr-&length == MAXSIZE)/* 顺序线性表已经满 */
if (pos & 1 || pos & ptr-&length + 1)
if (pos &= ptr-&length)
/* 将要插入位置之后的数据元素向后移动一位 */
for (int i = ptr-&length - 1; i &= pos - 1; i--)
ptr-&data[i + 1] = ptr-&data[i];
ptr-&data[pos - 1] = E /* 将新元素插入 */
ptr-&length++;
/*删除ps的第pos个数据元素,并用pe返回其值,ps的长度减1*/
bool ListDelete(SqList *ps, int pos, ElemType *pe)
if (pos & 1 || pos & ps-&length)
*pe = ps-&data[pos - 1];
/* 将删除位置后继元素前移 */
for (int i = i & ps-& i++)
ps-&data[i - 1] = ps-&data[i];
ps-&length--;
int ListLength(SqList Sq)
return Sq.
/*将所有在线性表pb中但不在pa中的元素都插入到pa中*/
void UnionList(SqList *pa, SqList *pb)
int lena = pa-&
int lenb = pb-&
for (int i = 0; i & i++)
if (GetElem(*pb, i + 1, &item))
if (Locate(*pa, item) == 0)
ListInsert(pa, ++lena, item);
int main(void)
SqList Sq;
InitList(&Sq);
for (int i = 1 ; i & 5; i++)
ListInsert(&Sq, i, i);
if (!ListEmpty(Sq))
cout && &Sq: & &&
for (int i = 0 ; i & ListLength(Sq); i++)
cout && Sq.data[i] && ' ';
int pos = Locate(Sq, 2);
if (pos != 0)
ListDelete(&Sq, pos, &result);
cout && &delete: & && result &&
if (!ListEmpty(Sq))
cout && &Sq: & &&
for (int i = 0 ; i & ListLength(Sq); i++)
cout && Sq.data[i] && ' ';
SqList Sq2;
InitList(&Sq2);
for (int i = 1 ; i & 4; i++)
ListInsert(&Sq2, i, 6);
ListInsert(&Sq2, 4, 7);
if (!ListEmpty(Sq2))
cout && &Sq2: & &&
for (int i = 0 ; i & ListLength(Sq2); i++)
cout && Sq2.data[i] && ' ';
UnionList(&Sq, &Sq2);
if (!ListEmpty(Sq))
cout && &Sq: & &&
for (int i = 0 ; i & ListLength(Sq); i++)
cout && Sq.data[i] && ' ';
1、程序中所说的位置pos应是 序号加1,如第一个元素序号为0,位置为1。
2、程序中所举的函数是最基本的操作,涉及更复杂的操作可以使用基 本操作的组合来完成,如上面的UnionList即求两个线性表集合A和B的并集。
3、初学者易混淆的点是:插入或删除 并没有真正进行内存的操作,只是进行了元素的移动,覆盖等,由length成员来记录现在线性表的长度,但总长度是确定的 即MAXSIZE,线性表的内存在栈上,函数返回时会被释放。

我要回帖

更多关于 顺序存储结构的特点 的文章

 

随机推荐