数据结构的一些迷惑 请帮忙解决一下,多谢了!
int ListInsert(sqlist &L,int i,int e)|*顺序表中插入元素*|
{int j;
if(i<1||i>L.lengt+1)
return 0;
i--;
for(j=L.length;j>i;j--)
L.data[j]=L.data[j-1];
L.data[i]=e;
L.lengt++;return 1;
void InitList(sqlist &L) |*初始化顺序表*|
{L.lengt=0;}
初始化和插入元素的算法中&L能否换为*L,L,*&L为什么?该咋么换呀?还有在链表中常用*&L,他能否用L来代替呢?该咋么换呀?
[解决办法]
因为在链表中需要进行地址操作,所以常用*&L,在函数中修改链表
[解决办法]
这实际就是一个传值还是传地址的问题嘛。
两种方法来改变函数调用中指向的对象。
1 声明:ListInsert(sqlist &L,int i,int e) 调用:ListInsert( L,int i,int e)
2 声明:ListInsert(sqlist *L,int i,int e) 调用:ListInsert( &L,int i,int e)
[解决办法]
这不是C语言讨论区吗?怎么会有引用???
回答LZ问题:
能用*L代替&L,不过代码也要相应变化,如:
void InitList(sqlist &L) ¦*初始化顺序表* ¦
{L.lengt=0;}
=>
void InitList(sqlist *L) ¦*初始化顺序表* ¦
{L->lengt=0;}
C++中更推荐使用引用,是纯粹的传地址,而且避免传参的时候生成临时对象,效率要高。
*&L 这个在参数列表中是表示指针的引用,跟L是完全不同的:
1,首先这是个指针,而L不是指针
2,这是个引用,是传地址的用法,用L只能传值
在写法上
1, L跟&L是相同的,都要用L.length=0
2, *L跟*&L是相同的,都用L->length=0
具体请参考随便一本C++语法的书。
[解决办法]
&L:引用.
*L:指针.
for example:
void swap(int &a,int &b);
调用此函数时:可以写成swap(a,b);//a,b为已定义变量
void swqp(int*a,int *b);//注意指针与引用的差别
调用此函数时:可以写成swap(&a,&b);//a,b为已定义变量