第二章_线性表(参考答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章线性表
一、填空题
1、数据逻辑结构包括线性结构、树型结构、图型结构这三种类型,树形结构和图形结构合称为非线性结构。
2、在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有个前驱结点,最后一个结点没有后续结点,其余每个结点有且只有一个后续结点。
3、在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。
4、在顺序表中,逻辑上相邻的元素,其物理位置一定相邻。在单链表中,逻辑上相邻的元素,其物理位置不一定相邻。
5、在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋结点的next域指示。
6、阅读下列算法,并补充所缺内容。
void purge_linkst( ListNode *& la )
{
// 从头指针为 la 的有序链表中删除所有值相同的多余元素,并释放被删结点空间ListNode *p,*q;
if(la==NULL) return;
q=la; p = la->link;
while (p)
{
if (p && ___(1)p->data!=q->data___) {q=p; p = p->link;}
else
{
q->link= ___(2)p->link___;
delete(p);
p=___(3)q->link___;
}
}//while
}// purge_linkst
二、选择题
1、在数据结构中,从逻辑上可以把数据结构分成 C。
A、动态结构和静态结构
B、紧凑结构和非紧凑结构
C、线性结构和非线性结构
D、内部结构和外部结构
2、线性表的逻辑顺序与存储顺序总是一致的,这种说法 B。
A、正确
B、不正确
3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。
A、必须是连续的
B、部分地址必须是连续的
C、一定是不连续的
D、连续或不连续都可以
4、在以下的述叙中,正确的是B。
A、线性表的线性存储结构优于链表存储结构
B、二维数组是其数据元素为线性表的线性表
C、栈的操作是先进先出
D、队列的操作方式是先进后出
三、综合题
1、已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
A、在P结点后插入S结点的语句序列是((4)、(1));
B、在P结点前插入S结点的语句序列是((7)、(11)、(8)、(4)、(1));
C、在表首插入S结点的语句序列是((5)、(12));
D、在表尾插入S结点的语句序列是((9)、(1)、(6)或(11)、(9)、(1)、(6))(其中6的位置可变);
(1)P->next=S;
(2)P->next=S->next->next;
(3)P->next=S->next;
(4)S->next=P->next;
(5)S->next=L;
(6)S->next=NULL;
(7)Q=P;
(8)while(P->next!=Q) P=P->next;
(9)while(P->next!=NULL) P=P->next;
(10)P=Q;
(11)P=L;
(12)L=S;
(13)L=P;
2、已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
A、删除P结点的直接后继结点的语句序列是(11、3、14);
B、删除P结点的直接前驱结点的语句序列是(10、12、8、11、3、14);
C、删除P结点的语句序列是(10、12、7、3、14);
D、删除首元结点的语句序列是(12、11、3、14);
E、删除尾元结点的语句序列是(9、11、3、14)或(12、9、11、3、14);
(1)P=P->next;
(2)P->next=P;
(3)P->next= P->next ->next;
(4)P = P->next ->next;
(5)while(P->next!=NULL) P=P->next;
(6)while(Q->next!=NULL) {P=Q;Q=Q->next};
(7)while(P->next!=Q) P=P->next;
(8)while(P->next->next!=Q) P=P->next;
(9)while(P->next->next!=NULL) P=P->next;
(10)Q=P;
(11)Q=P->next;
(12)P=L;
(13)L=L->next;
(14)free(Q);
3、线性表定位操作ListFind(L, x)的功能是:在线性表L中查找是否存在数据元素x,如果存在,返回线性表中和x值相等的第1个数据元素的序号(序号编号从0开始);如果不存在,返回-1。要求编写顺序表的定位操作算法。
int ListFind(Sqlist L, ElemType x) {
ElemType *p;
int i=0;
p = L.elem;
while(i < L.length-1 && !Compare(*p++,x)){
return i;
++i;
}
return -1;
}