大家帮我看一下这个顺序表的插入数据元素的算法是不是有问题?

在顺序表L的第p(1<=p<=length+1)个位置插入新的元素e.如果p的输入不正确,则返回0,代表插入失败;如果p的输入正确则将顺序表第p个元素及以后的元素右移一个... 在顺序表L的第p(1<=p<=length+1)个位置插入新的元素e.如果p的输入不正确,则返回0,代表插入失败;如果p的输入正确则将顺序表第p个元素及以后的元素右移一个位置,腾出一个空位置插入新元素,顺序表长度增加1,插入操作成功,返回1.
顺序表的结构定义
typedef struct
{
int data[maxsize];
int length;
}Sqlist;
书上的算法:
int insert(Sqlist &L,int p,int e)
{
int i;
if(p<1||p>L.length+1||L.length==maxSize)
return 0;
for(i=L.length;i>=p;--i)
L.data[i+1]=L.data[i];
L.data[p]=e;
++(L.length);
return 1;
}
我想问的是if语句中的 L.length==maxSize应该改成L.length+1==maxSize吧?因为这个时候才是表长已经达到顺序表的最大允许值吧?求真相,!
0号单元不存储数据
展开
 我来答
byzxybd
2012-09-18 · TA获得超过455个赞
知道小有建树答主
回答量:731
采纳率:100%
帮助的人:426万
展开全部
思路比较清晰。条件判断中有三个
1、<1的位置不存数据这个插入位置不在范围内。
2、>L.lenght+1在表的尾部之后了,超出范围。
3、L.length==maxSize-1,说明表是满的,就没有再插入的可能。(0位置不算表空间)

所以你的说法是正确的。

程序书写太不规范,容易出现理解性错误。

int insert(Sqlist &L,int p,int e)
{
int i;
if(((p<1) || (p>L.length+1)) || (L.length==maxSize-1))// 不在表范围,或满 ,退出
{
return 0;
}
for(i=L.length;i>=p;--i)
{
L.data[i+1]=L.data[i];
}
L.data[p]=e;
++(L.length);
return 1;
}

如果你说的是0位置不存数据也不算表长,表长就要比定义的小1.
if(((p<1) || (p>L.length+1)) || (L.length==maxSize-1))// 不在表范围,或满 ,退出
追问
发错人了,我要发给另外两个的,我以为你说我错了,不好意思
追答
你说的对。
所以长度达到
if(((pL.length+1)) || (L.length==maxSize-1))// 不在表范围,或满 ,退出

就是判断如果长度达到最大,下面的循环就不要做了。

(o_o)
一刷新,问题变了。
百度网友76bc4363f
2012-09-18 · TA获得超过1019个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:259万
展开全部
int data[maxsize];
由这个定义可知表的最大长度是maxsize,下表是0~maxsize-1,所以上面是对的。
你犯糊涂了吧
追问
但是L.length永远不可能等于maxsize啊,L.length至少要比maxsize小1吧?假设按你说的,书上的代码没有错,if中是(L.length==maxsize),那么如果这时L.length==maxsize-1,则后面的for循环执行,i=L.length=maxsize-1, L.data[i+1]=L.data[i];岂不是错了?因为=左边的L.data[i+1]不就是L.data[maxsize]了吗?数组下标最多取L.data[maxsize-1]啊!
追答
你现在条件又变了:0号单元不存储数据。如果这样的话,确实里面应该变成L.length==maxsize-1
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fan900207
2012-09-18 · TA获得超过496个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:43.6万
展开全部
原题目是正确的,if后面的3个条件,只要有一个成立就说明插入不成功,return 0;L.length ==maxSize表示你在插入这个元素之前,链表已经达到最大值了,所以你的插入肯定是违法的,肯定不成功,返回0. 如果你改成L.length + 1==maxSize,则表示我插入这个元素以后链表才达到最大值,而这种情况是插入成功的情况,不是插入不成功的情况。if后面要跟着的是插入不成功的情况
追问
但是L.length永远不可能等于maxsize啊,L.length至少要比maxsize小1吧?假设按你说的,书上的代码没有错,if中是(L.length==maxsize),那么如果这时L.length==maxsize-1,则后面的for循环执行,i=L.length=maxsize-1, L.data[i+1]=L.data[i];岂不是错了?因为=左边的L.data[i+1]不就是L.data[maxsize]了吗?数组下标最多取L.data[maxsize-1]啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式