请教一个关于顺序表初始化的问题

_MrRobot_ 2017-05-23 10:09:05
代码参考自严蔚敏《数据结构》

//初始化
Status InitList_Sq(Sqlist *list) {
[code=c] list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
if ((*list).elem){
list->length = 0;
return OK;
}
//插入
p = &(*list).elem[index - 1]; //要插入的位置

EleType *end, *p;
end = &((*list).elem[list->length - 1]);
for (end = &((*list).elem[list->length - 1]); p <= end; end--){
*(end + 1) = *(end);
}
*p = e;
(*list).length++;


问题1:初始化的时候

list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));

怎么体现该顺序表的长度为LISI_INIT_SIZE,比方说头指针的地址是多少,尾指针的地址是多少?
问题2:
在插入的时候,如果初始表长为0,插入的位置为1,那么指针end 的地址会小于p,书上的表达是否有误
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_MrRobot_ 2017-05-24
  • 打赏
  • 举报
回复
引用 4 楼 u010414874 的回复:
[quote=引用 3 楼 cfjtaishan 的回复:] [quote=引用 2 楼 u010414874 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:]
 list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
list->elem 是在堆上申请的空间,长度就是LISTI_INIT_SIZE 首地址就是list->elem;尾地址为:list->elem + LISTI_INIT_SIZE end指针是大于p的,p = list->elem,那么p是小于end的。因为end是高地址,p是低地址。 建议将p,list->elem,end的地址值打出来。

end = &((*list).elem[list->length - 1]);
    printf("The p address is: %d\n",p);
    printf("The end address is: %d\n",end);
    printf("The elem address is: %d\n",list->elem);
打印出来的地址为

The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的[/quote] 那么list->length的值是多少?p指向那里?是指向list->elem 我说end是值list->elem+LISTI_INIT_SIZE, p = list->elem, [/quote]

end = &((*list).elem[list->length - 1]);
书上的尾指针指向的是这个,当表长为0的,插入的位置为1的时候,end的地址小于p的地址,怎么进行元素的后移呢?[/quote] 书上是对的,想明白了,后续还有个 *p = e 的操作
_MrRobot_ 2017-05-23
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
[quote=引用 2 楼 u010414874 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:]
 list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
list->elem 是在堆上申请的空间,长度就是LISTI_INIT_SIZE 首地址就是list->elem;尾地址为:list->elem + LISTI_INIT_SIZE end指针是大于p的,p = list->elem,那么p是小于end的。因为end是高地址,p是低地址。 建议将p,list->elem,end的地址值打出来。

end = &((*list).elem[list->length - 1]);
    printf("The p address is: %d\n",p);
    printf("The end address is: %d\n",end);
    printf("The elem address is: %d\n",list->elem);
打印出来的地址为

The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的[/quote] 那么list->length的值是多少?p指向那里?是指向list->elem 我说end是值list->elem+LISTI_INIT_SIZE, p = list->elem, [/quote]

end = &((*list).elem[list->length - 1]);
书上的尾指针指向的是这个,当表长为0的,插入的位置为1的时候,end的地址小于p的地址,怎么进行元素的后移呢?
自信男孩 2017-05-23
  • 打赏
  • 举报
回复
引用 2 楼 u010414874 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:]
 list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
list->elem 是在堆上申请的空间,长度就是LISTI_INIT_SIZE 首地址就是list->elem;尾地址为:list->elem + LISTI_INIT_SIZE end指针是大于p的,p = list->elem,那么p是小于end的。因为end是高地址,p是低地址。 建议将p,list->elem,end的地址值打出来。

end = &((*list).elem[list->length - 1]);
    printf("The p address is: %d\n",p);
    printf("The end address is: %d\n",end);
    printf("The elem address is: %d\n",list->elem);
打印出来的地址为

The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的[/quote] 那么list->length的值是多少?p指向那里?是指向list->elem 我说end是值list->elem+LISTI_INIT_SIZE, p = list->elem,
_MrRobot_ 2017-05-23
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
 list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
list->elem 是在堆上申请的空间,长度就是LISTI_INIT_SIZE 首地址就是list->elem;尾地址为:list->elem + LISTI_INIT_SIZE end指针是大于p的,p = list->elem,那么p是小于end的。因为end是高地址,p是低地址。 建议将p,list->elem,end的地址值打出来。

end = &((*list).elem[list->length - 1]);
    printf("The p address is: %d\n",p);
    printf("The end address is: %d\n",end);
    printf("The elem address is: %d\n",list->elem);
打印出来的地址为

The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的
自信男孩 2017-05-23
  • 打赏
  • 举报
回复
 list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
list->elem 是在堆上申请的空间,长度就是LISTI_INIT_SIZE 首地址就是list->elem;尾地址为:list->elem + LISTI_INIT_SIZE end指针是大于p的,p = list->elem,那么p是小于end的。因为end是高地址,p是低地址。 建议将p,list->elem,end的地址值打出来。

33,318

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧