你的程序有几个问题:
1)在构造函数中,应先给maxlen赋值,然后创建数组空间,你顺序写反了
2)在main中只是对局部变量elem赋初值,这和线性表aelem没有任何关系,也就是字符串并没有送到顺序表里。
3)sqlist类中的inverse方法,只是对顺序表中的内容逆序输出,并没有逆转,而且使用p!=NULL也不对
下面是修改正确的程序:
#include<iostreamh>
typedef char elemtype;
class sqlist
{private:
elemtype elem;
int length;
int maxlen;
public:
sqlist(int l,int m,elemtype element) //加一参数,在构造函数中同时初始化顺序表的内容
{
length=l;
maxlen=m;
elem=new elemtype[maxlen]; //赋值顺序改过来了
for(int i=0;i<length;i++) elem[i]=element[i];
elem[length]=NULL; //最后一个元素赋值为空
};
~sqlist(){delete []elem;};
void inverse();
};
void sqlist::inverse()
{elemtype p;
int i;
p=elem;
while(p!=NULL){p++;} //判断指针是否到达表尾
p--;
//for(i=0;i<length;i++) cout<<p--; 这里只是逆序输出,没有逆转顺序表,改成:
for(i=0;i<length/2;i++) {elemtype tmp=elem[i];elem[i]=p;p--=tmp;} //首尾对调,完成逆转
for(i=0;i<length;i++) cout<<elem[i]; //输出顺序表中内容
}
void main(void)
{sqlist a(10,20,"abcdefghij");
ainverse();
}
顺序存储结构中各数据元素在存储空间中是按照逻辑顺序依次连续存放的,顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。而题目中“正数”则体现了一定的逻辑顺序,并且题目要求“采用方法快速找到想要的数据”,应该是选择排序。选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
二叉树按照层序遍历,依次编号,按照编号的顺序,存储在连续存储单元的方式就是二叉树的顺序存储。
如果二叉树不是满二叉树,则只存储有内容的节点,缺失的结点在存储的过程中,所对应的位置不存储任何东西,即是空的。
对于题中所给的存储结构,构造一个满二叉树,结点为空,再按照层序遍历,依次编号,在相应的结点填上数据,没有数据的则为空结点。
最后删除所有的空结点,即为所对应的二叉树
扩展资料:
二叉树除了按顺序存储的存储方式,还有另外一种——链式存储方式,即用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
其中,data存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表。如下图所示:
参考资料来源:百度百科-二叉树顺序存储
参考资料来源:百度百科-二叉树
光盘是随机存储,磁带是顺序存储。
随机存储器用于存放正在运行的程序和数据,特点是具有可读写性和易丢失性,即其中保存的信息,一旦掉电就会全部丢失。
随机存储器又可分为静态随机存储器SRAM和动态随机存储器DRAM,前者因为制作工艺复杂,价格高昂,只有少量用于高速缓存Cache;后者则是在微机中被称为内存条的东西。
扩展资料:
存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器(简称内存),辅助存储器又称外存储器(简称外存)。内存储器最突出的特点是存取速度快,但是容量小、价格贵;外存储器的特点是容量大、价格低,但是存取速度慢。
内存储器用于存放那些立即要用的程序和数据;外存储器用于存放暂时不用的程序和数据。内存储器和外存储器之间常常频繁地交换信息。
外存通常是磁性介质或光盘,像硬盘,软盘,磁带,CD等,能长期保存信息,并且不依赖于电来保存信息,但是由机械部件带动,速度与CPU相比就显得慢的多。
参考资料来源:百度百科-外存储器
已经调试通过,要修改的地方加了注释,望采纳!!!!!!!!
#include<stdioh>
typedef struct list
{
int v[1000];
int len;
}LIST;
LIST creatlist(LIST L);
LIST inslist(LIST L);
void traverlist(LIST L);
LIST L; // 定义为全局变量,以为后面的输入要能影响线性表
void main(void) //实参不写数据类型 如 creatlist(LIST L) 就是错的
{
L=creatlist( L);
L=inslist( L);
traverlist( L);
}
LIST creatlist(struct list L)
{
printf("请输入需要创建的数据个数: ");
scanf("%d",&Llen);
for(int i=0;i<=Llen-1;i++) //Llen-1 这样表示len所代表的值减去1是允许的
{
printf("请输入数据第%d个数据: ",i+1);
scanf("%d",&Lv[i]);
}
return L;
}
LIST inslist(LIST L)
{
int c, pos;
printf("请输入要插入的数据和要插入的表位置: ");
scanf("%d%d",&c,&pos); //////////// 输入的时候不需要,和\n
Llen = Llen + 1; ///没插入一个新的数据,线性表的长度要加1
for(int i=Llen-1; i>=pos; i--) // 从pos到最后一个位置,均后移动一下,为新元素腾出位置
{
Lv[i]=Lv[i-1];
}
Lv[i]=c;
return L;
}
void traverlist(LIST L)
{
for(int i=0;i<Llen;i++)
printf("%d ",Lv[i]);
printf("\n");
}
连续的空间来存储数据,可以直接以下标方式访问数据,时间复杂度为O(1);
当插入或删除数据时,需要移动数据,时间复杂度为O(n)。
如果数据查询的使用频率远远高于数据插入或删除的频率,顺序表是一个效率高的存储结构。
以上就是关于顺序存储的顺序表逆转的程序哪里有错误啊全部的内容,包括:顺序存储的顺序表逆转的程序哪里有错误啊、江上万个无序并且互不相等的正数存储程序顺序存储结构中采取什么方法能够快速、二叉树的顺序存储方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)