首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数据结构的一些迷惑 请帮忙解决一下,谢谢了

2012-02-07 
数据结构的一些迷惑 请帮忙解决一下,多谢了!int ListInsert(sqlist &L,int i,int e)|*顺序表中插入元素*|{

数据结构的一些迷惑 请帮忙解决一下,多谢了!
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为已定义变量 

热点排行
Bad Request.