《数据结构》书上的一个简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:17:44
是个“双向链表”问题看不懂:
插入个元素:Status ListInsert_DuL(DuLLinkList &L,int i,ElemType e)
删除个元素:Status ListDelete_DuL(DuLLinkList &L,int i,ElemType &e)
问题是:为什么插入的e前面不要加&,而删除则要加呢??指点下,谢谢!!

我看了下书,发现这个问题是楼主没有把书看清楚,
Status ListInsert_DuL(DuLLinkList &L,int i,ElemType e)
和Status ListDelete_DuL(DuLLinkList &L,int i,ElemType &e)这两个函数中的e的作用是不一样的,插入操作中的 e 是传递插入的节点的数据,而删除操作中的e是用来返回你删除的节点的值的.因为是用来返回的,所以要用引用,相当于指针.
比如在主程序中
ElemType s;
ListDelete_DuL(L,s)
就把s这个变量的地址传递进去了,在ListDelete_DuL函数中的e通过传进的地址和s 共享一个内存区,这时e的值就可以返回给 s 了

楼主看书要看仔细,特别是函数的说明

因为插入时是插入一个节点,需要的是节点的数据,那个节点是在插入时才动态创建,而删除时是删除一个已经存在的节点,需要用指针来指出要删除节点的位置,当然如果链表中数据都是唯一的话,也可以传数据而不是指针,这样在删除的时候就需要遍历链表来查找这个节点再删除了

因为ElemType 是个指针类型,e 这里就代表了他所指内容的地址,就像数组名一样,如果再用&的话就是指针本身的地址了,就不是指针所指的内容的地址了。

插入的时候,e是插入的值

删除的时候,e表示的,是被删除元素的地址,所以用&表示取地址