数据结构课程课后习题集答案解析 下载本文

内容发布更新时间 : 2024/12/25 12:30:02星期一 下面是文章的全部内容请认真阅读。

}

void InterSection(SLink *L1,SLink *L2,SLink *&L3) { }

void Subs(SLink *L1,SLink *L2,SLink *&L3)

//求差集

SLink *p,*q,*s,*tc;

L3=(SLink *)malloc(sizeof(SLink)); tc=L3; p=L1->next; q=L2->next;

while (p!=NULL && q!=NULL) { }

tc->next=NULL;

if (p->datadata) { }

p=p->next; q=q->next;

s=(SLink *)malloc(sizeof(SLink)); s->data=p->data; tc->next=s; tc=s; p=p->next; q=q->next; else if (p->data>q->data) else //p->data=q->data

//求交集

}

while (p!=NULL) { }

while (q!=NULL) { }

tc->next=NULL;

s=(SLink *)malloc(sizeof(SLink)); s->data=q->data; tc->next=s; tc=s; q=q->next;

s=(SLink *)malloc(sizeof(SLink)); s->data=p->data; tc->next=s; tc=s; p=p->next; }

p=p->next; q=q->next;

数据结构简明教程

{ } void main() {

SLink *A,*B,*C,*D,*E; ElemType a[]={1,3,6,8,10,20}; CreateListR(A,a,6);

//尾插法建表

printf(\集合A:\ElemType b[]={2,5,6,10,16,20,30}; CreateListR(B,b,7);

//尾插法建表

printf(\集合B:\printf(\求A、B并集C\\n\Union(A,B,C);

//求A、B并集C

printf(\集合C:\printf(\求A、B交集C\\n\InterSection(A,B,D);

//求A、B并集D

printf(\集合D:\SLink *p,*q,*s,*tc;

L3=(SLink *)malloc(sizeof(SLink)); tc=L3; p=L1->next; q=L2->next;

while (p!=NULL && q!=NULL) { }

while (p!=NULL) { }

tc->next=NULL;

s=(SLink *)malloc(sizeof(SLink)); s->data=p->data; tc->next=s; tc=s; p=p->next; if (p->datadata) { }

else if (p->data>q->data) { }

q=q->next; p=p->next; q=q->next; else //p->data=q->data

s=(SLink *)malloc(sizeof(SLink)); s->data=p->data; tc->next=s; tc=s; p=p->next;

}

printf(\求A、B差集E\\n\Subs(A,B,E); DestroyList(A); DestroyList(B); DestroyList(C); DestroyList(D); DestroyList(E);

//求A、B差集E

printf(\集合E:\

练习题3

1. 单项选择题

(1)栈中元素的进出原则是( )。 A.先进先出 B.后进先出 C.栈空则进 D.栈满则出 答:B

(2)设一个栈的进栈序列是A、B、C、D(即元素A~D依次通过该栈),则借助该栈所得到的输出序列不可能是( )。

A.A,B,C,D B.D,C,B,A C.A,C,D,B D.D,A,B,C 答:D

(3)一个栈的进栈序列是a、b、c、d、e,则栈的不可能的输出序列是( )。 A.edcba B.decba C.dceab D.abcde 答:C

(4)已知一个栈的进栈序列是1,2,3,…,n,其输出序列的第一个元素是i(1≤i≤n)则第j(1≤j≤n)个出栈元素是( )。

A.i B.n-i C.j-i+1 D.不确定 答:D

(5)设顺序栈st的栈顶指针top的初始时为-1,栈空间大小为MaxSize,则判定st栈为栈空的条件为( )。

A.st.top==-1 B.st.top!=-1 C.st.top!=MaxSize D.st.top==MaxSize 答:A

(6)设顺序栈st的栈顶指针top的初始时为-1,栈空间大小为MaxSize,则判定st栈为栈满的条件是 。

A.st.top!=-1 B.st.top==-1 C.st.top!=MaxSize-1 D.st.top==MaxSize-1 答:D

(7)队列中元素的进出原则是( )。 A.先进先出 B.后进先出 C.栈空则进 D.栈满则出

数据结构简明教程

答:A (8)元素A、B、C、D顺序连续进入队列qu后,队头元素是( ① ),队尾元素是( ② )。 A.A B.B C.C D.D 答:①A ②D。

(9)一个队列的入列序列为1234,则队列可能的输出序列是( )。 A.4321 B.1234 C.1432 D.3241 答:B

(10)循环队列qu(队头指针front指向队首元素的前一位置,队尾指针rear指向队尾元素的位置)的队满条件是( )。

A. (qu.rear+1)%MaxSize==(qu.front+1)%MaxSize B. (qu.rear+1)%MaxSize==qu.front+1 C.(qu.rear+1)%MaxSize==qu.front A.qu.rear==qu.front 答:C

(11)循环队列qu(队头指针front指向队首元素的前一位置,队尾指针rear指向队尾元素的位置)的队空条件是( )。

A. (qu.rear+1)%MaxSize==(qu.front+1)%MaxSize B. (qu.rear+1)%MaxSize==qu.front+1 C.(qu.rear+1)%MaxSize==qu.front D.qu.rear==qu.front 答:D

(12)设循环队列中数组的下标是0~N-1,其头尾指针分别为f和r(队头指针f指向队首元素的前一位置,队尾指针r指向队尾元素的位置),则其元素个数为( )。

A.r-f B.r-f-1 C.(r-f)%N+1 D.(r-f+N)%N 答:D

(13)设有4个数据元素a、b、c和d,对其分别进行栈操作或队操作。在进栈或进队操作时,按a、b、c、d次序每次进入一个元素。假设栈或队的初始状态都是空。现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是( ① ),第二次出栈得到的元素是( ② );类似地,考虑对这4个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是( ③ ),第二次出队得到的元素是( ④ )。经操作后,最后在栈中或队中的元素还有( ⑤ )个。

①~④:A.a B.b C.c D.d ⑤: A.1 B.2 C.3 D.0 答:①B ②D ③A ④B ⑤B

(14)设栈S和队列Q的初始状态为空,元素e1~e6依次通过栈S,一个元素出后即进队列Q,若6个元素出队的序列是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是( )。