数据结构第二章线性表测试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章线性表
1、描述一下三个概念的区别:头指针,头结点,首元结点。并给予图示。
2、对于有头结点的单链表,分别写出定位成功时,实现下列定位语句序列。(1)定位到第i 个结点a i ;
(2)定位到第i 个结点的前驱a i-1;
(3)定位到尾结点;
(4)定位到尾结点的前驱。
3、已知L 是有表头结点的单链表,且P 结点既不是首元结点,也不是尾结点,试写出实现下列功能的语句序列。
(1)在P 结点后插入S 结点;(2)在P 结点前插入S 结点;(3)在表首插入S 结点;(4)在表尾插入S 结点
.
p=head;
p=head; j=0;
while ( p && jnext; j++;}
p=head; j=0;
while ( p && j
p=head;
while ( p ->next ) p=p->next;
while ( p->next->next ) p=p->next;
(1)s->next=p->next; p->next=s;
(2)q =L ;
whil e ( q ->next !=p ) q =q ->next;s->next=p 或 q ->next ;
q ->next=s;
(3 ) s->next=L ->next; L ->next=s;
(4)q =L ;
whil e ( q ->next !=NULL) q =q ->next;s->next= q ->next ; q ->next=s;
4、设计算法:在顺序表中删除值为e 的元素,删除成功,返回1;否则,返回0。
5、设计一个算法,将一个带头节点的数据域依次为a 1,a 2,…,a n (n ≥3)的单链表的所有节点逆置,即第一个节点的数据域变为a n ,…,最后一个节点的数据域为a 1。(注意:先用自然语言描述算法基本思想,然后用类C++语言描述)
int Sqlist
{ for (i=1; i<=len g t h ; i ++) // 按值顺序查找 * i 可从0开始
if (elem[i-1]= =e) // 找到,进行删除操作
{ for ( j=i; j length - - ; // 表长减一 return 1 ; //删除成功,返回 1 } return 0 ; // 未找到,删除不成功,返回 0 } 1 void invert(LinkList *&head) //逆置链表处理 2 { 3 LinkList* p = head->next; 4 LinkList* pri = NULL; //之前的节点 5 while(p){ 6 LinkList* q = new LinkList; 7 q->data = p->data; //把当前节点记录下来 8 q->next = pri; 9 pri = q; 10 head->next = q; 11 LinkList* t = p; //当前节点没用了删除掉 12 p=p->next; 13 delete(t); 14 } 15 }