① 顺序表中有10个数据元素,若第一个元素的存储地址是1000,则最后一个元素地址是1036,第5个元素的地址是
第 10 个元素地址 与 第 1 个元素地址之差,就等于 前面 9 个元素所占铅册用的地址。所以,每个元素占用的地址数为:
=(1036 -1000)/物孝(10-1) = 4
所以,第 5 个槐蚂宏元素的地址是:
=1000 + (5-1) * 4
=1016
② 数据结构:设计一个高效算法,将顺序表中的所有元素逆置,要求算法空间复杂度为O(1)。
设计一个高效算法,将顺序表中的所有元素逆置,要求算法空间复杂度为O(1)扫描顺序表L的前半部分元素L.data[i] (0<=i<L.length/2),将其腊绝与后半部分的对应元素L.data[L.length-1-i]进行交换即可。
顺序表的存储只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素占用存储单元的长度。
(2)顺序表中数据元素的存储地址算法扩展阅读:
数据的物理结构是数据结构在计算机中的表示,它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种。
数据元素的机裂局慧内用二进制位(bit)的位串表示数据元素。当数据元素有若干个肆答数据项组成时,位串中与各个数据项对应的子位串称为数据域(data field)。
③ 能详细描述一下顺序存储的数组元素的存放地址的计算方法吗
假设数组各维的下界是不是1,二维数组A(mn)按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。元素a(ij)的存储地址应是数组的基地址加上排在a(ij)前面的元素所占用的单元数。因为a(ij)位于第i行、第j列,前面i-1行一共有(i-1)×n个元素,第i行上a(ij)前面又有j-1个元素,故它前面一共有(i-1) ×n+j-1个元素。
因此,a(ij)的地址计算函数为:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。
同样,三维数组A(ijk)按“行优先顺序”存储,其地址计算函数为:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。
上述讨论均是假设数组各维的下界是1,更一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是1。a(ij)前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上a(ij)前一共有j-c2个元素。
因此,a(ij)的地址计算函数为:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。
例如,在C语言中,数组各维下标的下界是0,因此在C语言中,二维数组的地址计算公式为:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。
④ 一个线性顺序表第一个元素的存储地址是100,每个元素的长度是2,则第五个元素地址为答案是107 还是108
108
100+(5-1)*2=108
第一个元素首地址是100
第二个元素首地址是102
第三个元素首地址是104
第四个元素首地址是106
第五个元素首地址是108
第i个元素首地址是100+2*(i-1)
(4)顺序表中数据元素的存储地址算法扩展阅读:
线性地址:针对32位CPU,线性地址是一个32位的无符号整数,可以表达高达232(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。对64位CPU,线性地址是一个64位的无符号整数,可以表达高达264。
⑤ 对于顺序存储元素存储单元的地址
对于顺序存储元素存储单元的地址一山哗兄定连续。顺序存储中,相邻数据元素的存放地芦饥址也相邻,内存中存储单元的地址必须是连续的,存储密度=1。不用为表示节点间的逻辑关系逗袭而增加额外的存储开销。
⑥ 对比顺序查找、二分查找和哈希查找算法,它们各自的特点是什么
顺序查找,二分查找和哈希查找算法,它们各自的特点是:x0dx0a1.对比顺序查找的特点就是从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。x0dx0a2.二分查找的特点就是从表中间开始查找目标元素。如果找到一致元素,则查找成渣姿功。如果中间元素比目标元素小,则仍用二分查找方法查找表的后半部分(表是递增排列的),反之中间元素比目标元素大,则查找表的前半部分。x0dx0a3.哈希算法的特点是是使用给定数据构造哈野梁毕希表,然后在哈希表上进行查找的一种算法。先给定一个值,然后根据哈希函数求得哈希地址,再根据哈希地址查找到要找的元素。是通过数据元素的存储地址进行查找的一种颂芹算法。
⑦ 某线性表采用顺序存储结构,若首地址为100,每个数据元素占用2个存储单元,则第8个元素的存储地址为
第8个元素的存储地址就是没配114和115,标称存储地址为114。
顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequential mapping)。它以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
由此得到的存储结构为芹山顺序存储结构,通常顺序存储结构是借助于计算机程序设计语言(枯首指例如c/c++)的数组来描述的。
(7)顺序表中数据元素的存储地址算法扩展阅读
顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
顺序存储结构封装需要三个属性:
存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置。
线性表的最大存储容量:数组的长度MaxSize。
线性表的当前长度:length。
注意:数组的长度与线性表的当前长度需要区分一下:数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。而线性表的当前长度是线性表中元素的个数,是会变化的。
⑧ 顺序存储结构的特点是什么
(1)利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构(物理结构)一致,逻辑位置相邻,存储位置也相邻。
(2)在访问顺序存储的线性表时,可以利用公式(2-2),快速地计算出任何一个数据元素的存储地址。因此,可以粗略地认为,访问每个数据元素所花费的时间相等。这种存取元素的方法称为随机存取法,使用这种存取方法的存储结构称为随机存储结构。
⑨ 设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
#include <stdio.h>
// a 顺序表 x 将要插入值 len 顺序表长度
// 返回值为表a的新长度
int insert(int x, int * a, int len)
{
printf("%3d ins ", x); // 这句为了演示用,显示插入的数值
int l, r, m;
// 查找插入位置
l = -1;
r = len;
m = (l + r) / 2;
while(r - l > 1)
{
if(a[m] < x) l = m;
else r = m;
m = l + (r - l) / 2;
}
if(r == len) a[r] = x;
else
{
for(l = len; l > r; l--) a[l] = a[l-1];
a[l] = x;
}
return ++len;
}
void print(int *a, int l)
{
int i;
for(i=0; i<l; i++) printf("%4d", a[i]);
printf(" ");
}
void main()
{
int a[20] = {1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0};
int len = 10;
print(a, len);
len = insert(20, a, len);
print(a, len);
len = insert(11, a, len);
print(a, len);
len = insert(10, a, len);
print(a, len);
len = insert(-1, a, len);
print(a, len);
len = insert(0, a, len);
print(a, len);
len = insert(1, a, len);
print(a, len);
len = insert(2, a, len);
print(a, len);
len = insert(55, a, len);
print(a, len);
}
⑩ 顺序表中,每一个数据元素所占的数目为4,且第一个数据元素的存储为100,怎样算出序号为7的存储地址
提问者的培察清顷问题中是不是漏了二个关键的词语啊?
顺序表中,每一个数据配正茄元素所占的数目为4,且第一个数据元素(序号为0)的“存储地址”为100,这样算出序号为7的存储地址为:
100+7*4=128