数据结构第二章练习题答案.docx

上传人:b****8 文档编号:10225251 上传时间:2023-02-09 格式:DOCX 页数:24 大小:18.48KB
下载 相关 举报
数据结构第二章练习题答案.docx_第1页
第1页 / 共24页
数据结构第二章练习题答案.docx_第2页
第2页 / 共24页
数据结构第二章练习题答案.docx_第3页
第3页 / 共24页
数据结构第二章练习题答案.docx_第4页
第4页 / 共24页
数据结构第二章练习题答案.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据结构第二章练习题答案.docx

《数据结构第二章练习题答案.docx》由会员分享,可在线阅读,更多相关《数据结构第二章练习题答案.docx(24页珍藏版)》请在冰豆网上搜索。

数据结构第二章练习题答案.docx

数据结构第二章练习题答案

/*文件名:

exp2-1.cpp*/

#include

#include

#defineMaxSize50

typedefcharElemType;

typedefstruct

{

ElemTypedata[MaxSize];

intlength;

}SqList;

externvoidInitList(SqList*&L);

externvoidDestroyList(SqList*L);

externintListEmpty(SqList*L);

externintListLength(SqList*L);

externvoidDispList(SqList*L);

externintGetElem(SqList*L,inti,ElemType&e);

externintLocateElem(SqList*L,ElemTypee);

externintListInsert(SqList*&L,inti,ElemTypee);

externintListDelete(SqList*&L,inti,ElemType&e);

voidmain()

{

SqList*L;

ElemTypee;

printf("

(1)初始化顺序表L\n");

InitList(L);

printf("

(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(L,1,'a');

ListInsert(L,2,'b');

ListInsert(L,3,'c');

ListInsert(L,4,'d');

ListInsert(L,5,'e');

printf("(3)输出顺序表L:

");

DispList(L);

printf("(4)顺序表L长度=%d\n",ListLength(L));

printf("(5)顺序表L为%s\n",(ListEmpty(L)?

"空":

"非空"));

GetElem(L,3,e);

printf("(6)顺序表L的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

ListInsert(L,4,'f');

printf("(9)输出顺序表L:

");

DispList(L);

printf("(10)删除L的第3个元素\n");

ListDelete(L,3,e);

printf("(11)输出顺序表L:

");

DispList(L);

printf("(12)释放顺序表L\n");

DestroyList(L);

}

//文件名:

exp2-2.cpp

#include

#include

usingnamespacestd;

typedefstructLNode//定义单链表结点类型

{

stringdata;

structLNode*next;

}LinkList;

voidInitList(LinkList*&L)

{

L=(LinkList*)malloc(sizeof(LinkList));//创建头结点

L->next=NULL;

}

voidDestroyList(LinkList*&L)

{

LinkList*p=L,*q=p->next;

while(q!

=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

}

intListEmpty(LinkList*L)

{

return(L->next==NULL);

}

/*intListLength(LinkList*L)

{

LinkList*p=L;inti=0;

while(p->next!

=NULL)

{

i++;

p=p->next;

}

return(i);

}

voidDispList(LinkList*L)

{

LinkList*p=L->next;

while(p!

=NULL)

{

printf("%s",p->data);

p=p->next;

}

printf("\n");

}

intGetElem(LinkList*L,inti,ElemType&e)

{

intj=0;

LinkList*p=L;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{

e=p->data;

return1;

}

}

intLocateElem(LinkList*L,ElemTypee)

{

LinkList*p=L->next;

intn=1;

while(p!

=NULL&&p->data!

=e)

{

p=p->next;

n++;

}

if(p==NULL)

return(0);

else

return(n);

}*/

intListInsert(LinkList*&L,inti,stringe)

{

intj=0;

LinkList*p=L,*s;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)//未找到第i-1个结点

return0;

else//找到第i-1个结点*p

{

s=(LinkList*)malloc(sizeof(LinkList));//创建新结点*s

s->data=e;

s->next=p->next;//将*s插入到*p之后

p->next=s;

return1;

}

}

/*intListDelete(LinkList*&L,inti,ElemType&e)

{

intj=0;

LinkList*p=L,*q;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)//未找到第i-1个结点

return0;

else//找到第i-1个结点*p

{

q=p->next;//q指向要删除的结点

if(q==NULL)return0;

e=q->data;

p->next=q->next;//从单链表中删除*q结点

free(q);//释放*q结点

return1;

}

}

*/

voidmain()

{

LinkList*h;

stringe;

printf("

(1)初始化单链表h\n");

InitList(h);

printf("

(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(h,1,"a");

/*ListInsert(h,2,'b');

ListInsert(h,3,'c');

ListInsert(h,4,'d');

ListInsert(h,5,'e');

printf("(3)输出单链表h:

");

DispList(h);

printf("(4)单链表h长度=%d\n",ListLength(h));

printf("(5)单链表h为%s\n",(ListEmpty(h)?

"空":

"非空"));

GetElem(h,3,e);

printf("(6)单链表h的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",LocateElem(h,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

ListInsert(h,4,'f');

printf("(9)输出单链表h:

");

DispList(h);

printf("(10)删除h的第3个元素\n");

ListDelete(h,3,e);

printf("(11)输出单链表h:

");

DispList(h);

printf("(12)释放单链表h\n");

DestroyList(h);*/

}

//文件名:

exp2-3.cpp

#include

#include

typedefcharElemType;

typedefstructDNode//定义双链表结点类型

{

ElemTypedata;

structDNode*prior;//指向前驱结点

structDNode*next;//指向后继结点

}DLinkList;

externvoidInitList(DLinkList*&L);//以下均为外部函数

externvoidDestroyList(DLinkList*&L);

externintListEmpty(DLinkList*L);

externintListLength(DLinkList*L);

externvoidDispList(DLinkList*L);

externintGetElem(DLinkList*L,inti,ElemType&e);

externintLocateElem(DLinkList*L,ElemTypee);

externintListInsert(DLinkList*&L,inti,ElemTypee);

externintListDelete(DLinkList*&L,inti,ElemType&e);

voidmain()

{

DLinkList*h;

ElemTypee;

printf("

(1)初始化双链表h\n");

InitList(h);

printf("

(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(h,1,'a');

ListInsert(h,2,'b');

ListInsert(h,3,'c');

ListInsert(h,4,'d');

ListInsert(h,5,'e');

printf("(3)输出双链表h:

");

DispList(h);

printf("(4)双链表h长度=%d\n",ListLength(h));

printf("(5)双链表h为%s\n",(ListEmpty(h)?

"空":

"非空"));

GetElem(h,3,e);

printf("(6)双链表h的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",LocateElem(h,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

ListInsert(h,4,'f');

printf("(9)输出双链表h:

");

DispList(h);

printf("(10)删除h的第3个元素\n");

ListDelete(h,3,e);

printf("(11)输出双链表h:

");

DispList(h);

printf("(12)释放双链表h\n");

DestroyList(h);

}

//文件名:

exp2-4.cpp

#include

#include

typedefcharElemType;

typedefstructLNode//定义循环单链表结点类型

{

ElemTypedata;

structLNode*next;

}LinkList;

externvoidInitList(LinkList*&L);//以下均为外部函数

externvoidDestroyList(LinkList*&L);

externintListEmpty(LinkList*L);

externintListLength(LinkList*L);

externvoidDispList(LinkList*L);

externintGetElem(LinkList*L,inti,ElemType&e);

externintLocateElem(LinkList*L,ElemTypee);

externintListInsert(LinkList*&L,inti,ElemTypee);

externintListDelete(LinkList*&L,inti,ElemType&e);

voidmain()

{

LinkList*h;

ElemTypee;

printf("

(1)初始化循环单链表h\n");

InitList(h);

printf("

(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(h,1,'a');

ListInsert(h,2,'b');

ListInsert(h,3,'c');

ListInsert(h,4,'d');

ListInsert(h,5,'e');

printf("(3)输出循环单链表h:

");

DispList(h);

printf("(4)循环单链表h长度=%d\n",ListLength(h));

printf("(5)循环单链表h为%s\n",(ListEmpty(h)?

"空":

"非空"));

GetElem(h,3,e);

printf("(6)循环单链表h的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",LocateElem(h,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

ListInsert(h,4,'f');

printf("(9)输出循环单链表h:

");

DispList(h);

printf("(10)删除h的第3个元素\n");

ListDelete(h,3,e);

printf("(11)输出循环单链表h:

");

DispList(h);

printf("(12)释放循环单链表h\n");

DestroyList(h);

}

//文件名:

exp2-5.cpp

#include

typedefcharElemType;

typedefstructDNode//定义循环双链表结点类型

{

ElemTypedata;

structDNode*prior,*next;

}DLinkList;

externvoidInitList(DLinkList*&L);//以下均为外部函数

externvoidDestroyList(DLinkList*&L);

externintListEmpty(DLinkList*L);

externintListLength(DLinkList*L);

externvoidDispList(DLinkList*L);

externintGetElem(DLinkList*L,inti,ElemType&e);

externintLocateElem(DLinkList*L,ElemTypee);

externintListInsert(DLinkList*&L,inti,ElemTypee);

externintListDelete(DLinkList*&L,inti,ElemType&e);

voidmain()

{

DLinkList*h;

ElemTypee;

printf("

(1)初始化循环双链表h\n");

InitList(h);

printf("

(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(h,1,'a');

ListInsert(h,2,'b');

ListInsert(h,3,'c');

ListInsert(h,4,'d');

ListInsert(h,5,'e');

printf("(3)输出循环双链表h:

");

DispList(h);

printf("(4)循环双链表h长度=%d\n",ListLength(h));

printf("(5)循环双链表h为%s\n",(ListEmpty(h)?

"空":

"非空"));

GetElem(h,3,e);

printf("(6)循环双链表h的第3个元素=%c\n",e);

printf("(7)元素a的位置=%d\n",LocateElem(h,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

ListInsert(h,4,'f');

printf("(9)输出循环双链表h:

");

DispList(h);

printf("(10)删除h的第3个元素\n");

ListDelete(h,3,e);

printf("(11)输出循环双链表h:

");

DispList(h);

printf("(12)释放循环双链表h\n");

DestroyList(h);

}

//文件名:

exp2-6.cpp

#include

#include

typedefcharElemType;

typedefstructLNode//定义单链表结点类型

{

ElemTypedata;

structLNode*next;

}LinkList;

externvoidDispList(LinkList*L);

voidCreateListR(LinkList*&L,ElemTypea[],intn)//尾插法建表

{

LinkList*s,*r;inti;

L=(LinkList*)malloc(sizeof(LinkList));//创建头结点

L->next=NULL;

r=L;//r始终指向终端结点,开始时指向头结点

for(i=0;i

{

s=(LinkList*)malloc(sizeof(LinkList));//创建新结点

s->data=a[i];

r->next=s;//将*s插入*r之后

r=s;

}

r->next=NULL;//终端结点next域置为NULL

}

voidSort(LinkList*&head)//单链表元素排序

{

LinkList*p=head->next,*q,*r;

if(p!

=NULL)//若原单链表中有一个或以上的数据结点

{

r=p->next;//r保存*p结点后继结点的指针

p->next=NULL;//构造只含一个数据结点的有序表

p=r;

while(p!

=NULL)

{

r=p->next;//r保存*p结点后继结点的指针

q=head;

while(q->next!

=NULL&&q->next->datadata)//在有序表中找插入*p的前驱结点*q

q=q->next;

p->next=q->next;//将*p插入到*q之后

q->next=p;

p=r;

}

}

}

voidUnion(LinkList*ha,LinkList*hb,LinkList*&hc)//求两有序集合的并

{

LinkList*pa=ha->next,*pb=hb->next,*s,*tc;

hc=(LinkList*)malloc(sizeof(LinkList));//创建头结点

tc=hc;

while(pa!

=NULL&&pb!

=NULL)

{

if(pa->datadata)

{

s=(LinkList*)malloc(sizeof(LinkList));//复制结点

s->data=pa->data;

tc->next=s;tc=s;

pa=pa->next;

}

elseif(pa->data>pb->data)

{

s=(LinkList*)malloc(sizeof(LinkList));//复制结点

s->data=pb->data;

tc->next=s;tc=s;

pb=pb->next;

}

else

{

s=(LinkList*)malloc(sizeof(LinkList));//复制结点

s->data=pa->data;

tc->next=s;tc=s;

pa=pa->next;//重复的元素只复制一个

pb=pb->next;

}

}

if(pb!

=NULL)pa=pb;//复制余下的结点

while(pa!

=NULL)

{

s=(LinkList*)malloc(sizeof(LinkList));//复制结点

s->data=pa->data;

tc->next=s;tc=s;

pa=pa->next;

}

tc->next=NULL;

}

voidInterSect(LinkList*ha,LinkList*hb,LinkList*&hc)//求两有序集合的差

{

LinkList*pa=ha->next,*pb,*s,*tc;

hc=(LinkList*)malloc(sizeof(LinkList));

tc=hc;

while(pa!

=NULL)

{

pb=hb->next;

while(pb!

=NULL&&pb->datadata)

pb=pb->next;

if(pb!

=NULL&&pb->data==pa->data)//若pa结点值在B中

{

s=(LinkList*)malloc(sizeof(LinkList));//复制结点

s->data=pa->data;

tc->next=s;tc=s;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1