数据结构第二章线性表测试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 && jnext; 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::DeleteElem( T e )

{ 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 }