关于单链表,下列哪个说法是错误的( )
A. 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻
B. 访问时只能通过头指针进入链表,并通过每个结点的指针域向后扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等
C. 数据元素的个数可以自由扩充
D. 插入、删除等操作需要大量移动数据,效率不高
以下程序用来实现在单链表L中第i个元素之前插入数据元素e ,请在括号处填上正确的语句。请注意语句分隔符号;已给出。Status ListInsert_L(LinkList &L,int i,ElemType e){p=L;j=0;while(p&&jnext;++j;} //寻找第i−1个结点if(!p||j>i−1)return ERROR; //i大于表长 + 1或者小于1s=new LNode; //生成新结点ss->data=e; //将结点s的数据域置为e(① ; ) //将结点s插入L中(② ; )return OK;}
以下程序用来实现将线性表L中第i个数据元素删除,请在括号处填写正确的语句,请注意语句的分隔符;已经给出。Status ListDelete_L(LinkList &L,int i,ElemType &e){p=L;j=0;while(p->next &&jnext; ++j;}if(!(p->next)||j>i-1) return ERROR; //删除位置不合理q=p->next; //临时保存被删结点的地址以备释放(①;) //改变删除结点前驱结点的指针域e=q->data; //保存删除结点的数据域(②;) //释放删除结点的空间return OK;}
下面的程序实现了用前插法构造一个单链表,请在空格处填上正确的语句,请注意语句分割符;已给出。void CreateList_F(LinkList &L,int n){L=new LNode;L->next=NULL; //先建立一个带头结点的空链表for(i=n;i>0;--i){p=new LNode; //生成新结点(①;) //输入元素值p->next=L->next;(②;) //插入到表头}}