新人求教线性表问题~

Samerol_Jomior 2013-07-23 10:12:52
这个是插入操作
int listinsert(sqlist* L,int i,datatype e)
{
int *newbase,*p,*q;

if (i<1 || i>L->length+1)
{
return ERROR;
}

if (L->length>=L->listsize)
{
newbase=(datatype *) realloc (L->data,(L->listsize+LISTINCREMENT)*sizeof(datatype));
if (!newbase)
{
exit(OVERFLOW); /* 存储分配失败 */
}
L->data = newbase; /* 新基址 */
L->listsize += LISTINCREMENT; /* 增加存储容量 */
}

q = L->data+i-1; /* q为插入位置 */

for (p=L->data+L->length-1; p>=q; --p)
{
*(p+1) = *p; /* 从最后元素到位置i间所有元素顺次后移 */
}

*q=e; /* 插入e */
++L->length; /* 表长增1 */

return OK;
}
在进行顺序表的创建时,这个是创建
void createlist(sqlist* L,int m)
{
int i;
datatype e;

printf("\t输入各元素: ");

for(i=1; i<=m; ++i)
{
scanf("%d",&e); /* 依次输入线性表中的元素 */
listinsert(L,i,e); /* 按顺序插入元素 */
}
printf("\n");
}
在进行插入操作调用listinsert的时候,是这样的listinsert(&L,i,e);
但是,这上面这个操作里面却是
listinsert(L,i,e); /* 按顺序插入元素 */
也就是说L前面是没有&的,我想问一下这是为什么?
...全文
169 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Samerol_Jomior 2013-07-28
  • 打赏
  • 举报
回复
引用 3 楼 my_live_123 的回复:

void createlist(sqlist* L,int m)
{
int i;
datatype e;

printf("\t输入各元素: ");

for(i=1; i<=m; ++i)
{
scanf("%d",&e); /* 依次输入线性表中的元素 */
listinsert(L,i,e); /* 按顺序插入元素 *///这里处于creat函数中,L本身就是指针,当然如此喽。
}
printf("\n");
}
也就是说在creat函数中定义的是sqlist *L,在调用listinsert的时候,listinsert里面L也是*L指针,所以调用的时候只需要用L~ 而假如主函数中我定义的是sqlist L,那么listinsert里定义的是* L,那么在我调用listinsert的时候就要用&L了,对不对呢?
Samerol_Jomior 2013-07-28
  • 打赏
  • 举报
回复
引用 5 楼 my_live_123 的回复:
[quote=引用 4 楼 u011144614 的回复:] [quote=引用 3 楼 my_live_123 的回复:]

void createlist(sqlist* L,int m)
{
int i;
datatype e;

printf("\t输入各元素: ");

for(i=1; i<=m; ++i)
{
scanf("%d",&e); /* 依次输入线性表中的元素 */
listinsert(L,i,e); /* 按顺序插入元素 *///这里处于creat函数中,L本身就是指针,当然如此喽。
}
printf("\n");
}
也就是说在creat函数中定义的是sqlist *L,在调用listinsert的时候,listinsert里面L也是*L指针,所以调用的时候只需要用L~ 而假如主函数中我定义的是sqlist L,那么listinsert里定义的是* L,那么在我调用listinsert的时候就要用&L了,对不对呢?[/quote] 是的,你已经理解了! [/quote] 非常感谢~
一根烂笔头 2013-07-28
  • 打赏
  • 举报
回复
引用 4 楼 u011144614 的回复:
[quote=引用 3 楼 my_live_123 的回复:]

void createlist(sqlist* L,int m)
{
int i;
datatype e;

printf("\t输入各元素: ");

for(i=1; i<=m; ++i)
{
scanf("%d",&e); /* 依次输入线性表中的元素 */
listinsert(L,i,e); /* 按顺序插入元素 *///这里处于creat函数中,L本身就是指针,当然如此喽。
}
printf("\n");
}
也就是说在creat函数中定义的是sqlist *L,在调用listinsert的时候,listinsert里面L也是*L指针,所以调用的时候只需要用L~ 而假如主函数中我定义的是sqlist L,那么listinsert里定义的是* L,那么在我调用listinsert的时候就要用&L了,对不对呢?[/quote] 是的,你已经理解了!
一根烂笔头 2013-07-26
  • 打赏
  • 举报
回复

void createlist(sqlist* L,int m)
{
int i;
datatype e;

printf("\t输入各元素: ");

for(i=1; i<=m; ++i)
{
scanf("%d",&e); /* 依次输入线性表中的元素 */
listinsert(L,i,e); /* 按顺序插入元素 *///这里处于creat函数中,L本身就是指针,当然如此喽。
}
printf("\n");
}
Samerol_Jomior 2013-07-24
  • 打赏
  • 举报
回复
引用 1 楼 lgbxyz 的回复:
LZ,你是不懂指针... L定义成sqlist* 类型就不用&, L定义成sqlist 类型就要用&.
按照你说的都报错呀。。。
LubinLew 2013-07-23
  • 打赏
  • 举报
回复
LZ,你是不懂指针... L定义成sqlist* 类型就不用&, L定义成sqlist 类型就要用&.

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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