① 顺序存储的有序线性表 有序线性链表
“顺序存储”表明该线性表使用顺序存储结构(即数组)
“有序”表明线性表内元素排列有序,如“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;
② C语言数据结构,堆用顺序表储存怎么存,假设用我图片的这个堆。
对这个堆从上到下,逐层从左到右,从0开始编号,然后按序号存储到一维数组里就行了。
③ 数据结构:有序表和顺序表不一样吗
有序表和顺序表不一样。
有序表中的“有序”是逻辑意义上的有序,指表中的元素按某种规则已经排好了位置。顺序表中的“顺序”是物理意义上的,指线形表中的元素一个接一个的存储在一片相邻的存储区域中。
数据结构在计算机中的表示称为数据的物理结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。顺序存储结构通常借助于程序设计语言中的数组来实现。
链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。链式存储结构通常借助于程序设计语言中的指针类型来实现。
(3)顺序存储的有序表图片扩展阅读:
顺序存储结构的优缺点:
顺序存储结构优点是可以节省存储空间,因为分配给数据的存储单元全用存放结点的数据,结点之间的逻辑关系没有占用额外的存储空间。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。
但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
顺序存储结构----网络
④ 线性表的顺序存储结构和线性表的链式存储结构分别是
您好,
这道题的答案是B
首先解题需要了解线性表的定义,顺序存储结构和链式存储结构的区别,他们分别如下:
资料扩展
定义:线性表(Linear List)是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。
对于线性表而言,有如下几点需要明确:
①数据元素的个数n定义为表的长度 = "list".length() ("list".length() = 0(表里没有一个元素)时称为空表)
②将非空的线性表(n>=0)记作:(a[0],a[1],a[2],…,a[n-1])
③数据元素a[i](0≤i≤n-1)只是个抽象符号,其具体含义在不同情况下可以不同,一个数据元素可以由若干个数据项组成。数据元素称为记录,含有大量记录的线性表又称为文件。这种结构具有下列特点:存在一个唯一的没有前驱的(头)数据元素;存在一个唯一的没有后继的(尾)数据元素;此外,每一个数据元素均有一个直接前驱和一个直接后继数据元素。
综上所述,这道题目选择B项。
⑤ 将两个顺序存储的有序表合并成一个有序表
将两个顺序存储的有序表合并成一个有序表的代码如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MaxSize 50
typedef struct
{
int data[MaxSize];
int length;
}SqList;
void ListInsert(SqList *L,int i,int e)
{
int j;
if(i<1||i>L->length+1)
exit(-1);
if(L->length>=MaxSize)
exit(-1);
for(j=L->length;j>=i;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=e;
L->length++;
}
void DispList(SqList *L)
{
int i;
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("
");
}
void Exchange(SqList *A,SqList *B,SqList *C)
{
int i=0,j=0,k=0;
while(i<A->length&&j<B->length)
{
if(A->data[i]<B->data[j])
C->data[k++]=A->data[i++];
else if(A->data[i]>B->data[j])
C->data[k++]=B->data[j++];
}
while(i<A->length)
C->data[k++]=A->data[i++];
while(j<B->length)
C->data[k++]=B->data[j++];
C->length=k;
}
void main()
{
SqList *A,*B,*C;
A=(SqList*)malloc(sizeof(SqList));
A->length=0;
B=(SqList*)malloc(sizeof(SqList));
B->length=0;
C=(SqList*)malloc(sizeof(SqList));
C->length=0;
ListInsert(A,1,1);
ListInsert(A,2,3);
ListInsert(A,3,5);
ListInsert(A,4,7);
ListInsert(A,5,9);
ListInsert(B,1,2);
ListInsert(B,2,4);
ListInsert(B,3,6);
ListInsert(B,4,8);
ListInsert(B,5,10);
ListInsert(B,6,12);
Exchange(A,B,C);
printf("顺序表A:");
DispList(A);
printf("顺序表B:");
DispList(B);
printf("顺序表C:");
DispList(C);
}
(5)顺序存储的有序表图片扩展阅读:
第二种解法的核心代码
bool Merge(SeqList A, SeqList B, SeqList &C)
{//C为合并后的顺序表
if (A.length + B.length > C.MaxSize) return false;//超出最大存储空间
int i = 0, j = 0, k = 0;
while( i < A.length && j < B.length)
{
if (A.data[i] <= B.data[j])
C.data[k++] = A.data[i++];
else
C.data[k++] = B.data[j++];
}
while (i < A.length) C.data[k++] = A.data[i++];
while (j < B.length) C.data[k++] = B.data[j++];
C.length = k;
return true;
}
⑥ 对于长度为18的顺序存储的有序表,若采用折半查找,则比较4次就能查找的元素共有几
等概率下,折半查找的平均查找长度公式为:ASL={[(n+1)/n]*log2^(n+1)}-1。
折半查找原码是:
if (key==r[mid]) return mid;
else if(key>r[mid]) low = mid+1;
else(key<r[mid]) high = mid-1;
第一次和37比较,第二次和12比较,第三次和20比较,第四次和26比较,所以是4次。
(6)顺序存储的有序表图片扩展阅读:
折半查找法:
假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=0,上限为h=4,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;
否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。
⑦ 有序顺序表和顺序表的区别
顺序表是指 数据在存储位置上相邻,但数据值不一定递增或递减
有序顺序表就是数据值递增或递减的顺序表
⑧ 怎么将两个顺序存储的有序表合并成一个有序表
具体代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 40
typedef struct
{
int data[MAX];
int length;
}LinkList;
void Initial_List(LinkList * &l,int n)//初始化顺序表
{
int i=0;
l=(LinkList *)malloc(sizeof(LinkList));
l->length = 0;
for(;i<n;i++)
scanf("%d",l->data+i);
l->length = n;
}
void Link(LinkList *l1,LinkList *l2,LinkList * &l3)//连接顺序表
{
int i,j;
l3=(LinkList *)malloc(sizeof(LinkList));
l3->length = l1->length + l2->length;
for(i=0;i<l3->length;i++)
{
if(i<l1->length)
{
l3->data[i] = l1->data[i];
}
else
{
l3->data[i] = l2->data[i%(l1->length)];
}
}
for(i=0;i<l3->length;i++)
{
for(j=i+1;j<l3->length;j++)
{
if(l3->data[i]>l3->data[j])
{
int temp=l3->data[i];
l3->data[i]=l3->data[j];
l3->data[j]=temp;
}
}
}
}
void Disp_List(LinkList *l)
{
int i=0;
printf("output: ");
for(;i<l->length;i++)
printf("%d ",l->data[i]);
printf(" ");
}
int main()
{
LinkList *l1,*l2,*l3;
int n;
printf("请输入第一个序列的元素个数: ");
scanf("%d",&n);
printf("请输入第一个序列的所有元素: ");
Initial_List(l1,n);
printf("请输入第二个序列的元素个数: ");
scanf("%d",&n);
printf("请输入第二个序列的所有元素: ");
Initial_List(l2,n);
Link(l1,l2,l3);
Disp_List(l3);
return 0;
}
⑨ 线性表顺序存储结构不是要求数据元素是按照逻辑顺序存放的吗,为什么下面这个图数字不是按照大小顺序存放
顺序存储指的是数据在内存中的存放方式,而不是排序方式,它与链式存储相对。
数据在内存的一片连续区域中依次相邻存放则称为顺序存储;数据在内存中分散存放,每个结点除了保存数据外,还保存下个结点的地址信息则称为链式存储。
数据按照由小到大或是由大到小的方式排列属于数据的排序方式。
⑩ 顺序和链式存储结构哪个能存储有序表
觉得顺序存储结构和链式存储结构都可以存储有序表。顺序存储结构可以预先预留一定空间(如一维数组),链表存储结构比较灵活,可以动态开辟空间,需要时增加。要用哪种存储结构要看你的有序表要进行什么操作了。