数据结构教程第二版课后答案.docx

上传人:b****1 文档编号:1986431 上传时间:2023-05-02 格式:DOCX 页数:15 大小:16.85KB
下载 相关 举报
数据结构教程第二版课后答案.docx_第1页
第1页 / 共15页
数据结构教程第二版课后答案.docx_第2页
第2页 / 共15页
数据结构教程第二版课后答案.docx_第3页
第3页 / 共15页
数据结构教程第二版课后答案.docx_第4页
第4页 / 共15页
数据结构教程第二版课后答案.docx_第5页
第5页 / 共15页
数据结构教程第二版课后答案.docx_第6页
第6页 / 共15页
数据结构教程第二版课后答案.docx_第7页
第7页 / 共15页
数据结构教程第二版课后答案.docx_第8页
第8页 / 共15页
数据结构教程第二版课后答案.docx_第9页
第9页 / 共15页
数据结构教程第二版课后答案.docx_第10页
第10页 / 共15页
数据结构教程第二版课后答案.docx_第11页
第11页 / 共15页
数据结构教程第二版课后答案.docx_第12页
第12页 / 共15页
数据结构教程第二版课后答案.docx_第13页
第13页 / 共15页
数据结构教程第二版课后答案.docx_第14页
第14页 / 共15页
数据结构教程第二版课后答案.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构教程第二版课后答案.docx

《数据结构教程第二版课后答案.docx》由会员分享,可在线阅读,更多相关《数据结构教程第二版课后答案.docx(15页珍藏版)》请在冰点文库上搜索。

数据结构教程第二版课后答案.docx

数据结构教程第二版课后答案

实验题2.2编写一个程序algo2-2.cpp,实现单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能。

(1)初始化单链表h;

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

(3)输出单链表h;

(4)输出单链表h长度;

(5)判断单链表h是否为空;

(6)输出单链表h的第3个元素;

(7)输出元素a的位置;

(8)在第4个元素位置上插入‘f’元素;

(9)输出单链表h;

(10)删除h的第3个元素;

(11)输出单链表h;

(12)释放单链表h;

程序:

#include

#include

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineNULL0

typedefintStatus;

typedefintElemType;

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LNode,*LinkList;

StatusInitList_h(LinkList&h){//初始化线性表

h=(LinkList)malloc(sizeof(LNode));//h指向头节点,头节点数据域为空

h->next=NULL;

returnOK;

}//InitList_h

StatusDispList_h(LinkList&h){//输出线性表

LinkListp=h->next;

while(p!

=NULL)

{

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

p=p->next;

}

returnOK;

}//DispList_h

StatusCreateList_h(LinkList&h,ElemTypea[],intn){//尾插法建表

LinkLists,r;inti;

h=(LinkList)malloc(sizeof(LNode));

r=h;

for(i=0;i

{

s=(LinkList)malloc(sizeof(LNode));

s->data=a[i];

r->next=s;

r=s;

}

r->next=NULL;

returnOK;

}//CreateList_h

StatusListLength_h(LinkListh){//求线性表的长度

LinkListp=h;intn=0;

while(p->next!

=NULL)

{

n++;

p=p->next;

}

return(n);

}//ListLength_h

StatusListEmpty_h(LinkListh){//判断单链表是否为空

return(h->next==NULL);

}//ListEmpty_h

StatusDestroyList_h(LinkList&h){//销毁线性表

LinkListp=h,q=p->next;

while(q!

=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

returnOK;

}//DestroyList_h

StatusGetElem_h(LinkListh,inti,ElemType&e){

//h为带头节点的单链表的头指针。

//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR

intj=0;

LinkListp=h;

while(j

=NULL)

{

j++;p=p->next;

}

if(p==NULL)

{

returnERROR;

}

else

{

e=p->data;

returnOK;

}

}//GetElem_h

StatusListInsert_h(LinkList&h,inti,ElemTypee){//插入数据元素

intj=0;

LinkListp=h,s;

/*

找到插入节点的上一个元素,如果是头节点则退出,当i=1时表示头节点,i=2时,表示第一个元素

*/

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

{

returnERROR;

}

else

{

s=(LinkList)malloc(sizeof(LNode));

s->data=e;

s->next=p->next;

p->next=s;

returnOK;

}

}//ListInsret_h

StatusListDelete_h(LinkList&h,inti,ElemType&e){//删除数据元素

intj=0;

LinkListp=h,q;

while(j

=NULL)//查找删除元素的前一个节点

{

j++;

p=p->next;

}

if(p==NULL)

{

returnERROR;

}

else

{

q=p->next;//q为要删除的元素节点

if(q==NULL)

{

returnERROR;

}

e=q->data;//e为删除节点的数据区域

p->next=q->next;

free(q);

returnOK;

}

}//ListDelete_h

intLocateElem_h(LinkListh,ElemTypee){//按元素值查找元素

LinkListp=h->next;

inti=1;

while(p!

=NULL&&p->data!

=e)

{

p=p->next;i++;

}

//如果要插入的节点为头节点,则退出

if(p==NULL)

{

returnERROR;

}

else

{

return(i);

}

}//LocateElem_h

intmain(){

ElemTypee,a[5]={'a','b','c','d','e'};

LinkListh;

printf("

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

InitList_h(h);//初始化单链表h

printf("

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

CreateList_h(h,&a[0],5);//依次采用尾插入法插入a,b,c,d,e元素

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

");

DispList_h(h);//输出单链表h

printf("\n");

printf("(4)单链表h的长度为:

");

printf("%d",ListLength_h(h));//输出单链表h的长度

printf("\n");

if(ListEmpty_h(h))

{

printf("(5)该单链表为空\n");

}

else

{

printf("(5)该单链表不为空\n");//判断单链表h是否为空

}

GetElem_h(h,3,e);

printf("(6)单链表h的第三个元素为:

");

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

printf("(7)单链表h中a的位置为:

");

printf("%d",LocateElem_h(h,'a'));//输出元素'a'的位置

printf("\n");

ListInsert_h(h,4,'f');//在第4个元素位置插入'f'元素

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

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

");

DispList_h(h);//输出单链表h

printf("\n");

ListDelete_h(h,3,e);//删除h的第3个元素

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

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

");//输出单链表h

DispList_h(h);

printf("\n");

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

DestroyList_h(h);//释放单链表h

return0;

}

实验2.3编编写一个程序,实现双链表的各种基本运算,并在此基础上设计一个主程序完成如下功能.

(1)初始化双链表h;

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

(3)输出双链表h;

(4)输出双链表h的长度;

(5)判断双链表h是否为空;

(6)输出双链表h的第3个元素;

(7)输出元素a的位置;

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

(9)输出双链表h;

(10)删除h的第3个元素;

(11)输出双链表h;

(12)释放双链表h;

#include

#include

typedefcharElemType;

typedefstructDNode

{

ElemTypedata;

structDNode*prior;

structDNode*next;

}DLinkList;

voidInitList(DLinkList*&h)

{

h=(DLinkList*)malloc(sizeof(DLinkList));

h->prior=h->next=NULL;

}

voidDestroyList(DLinkList*&h)

{

DLinkList*p=h,*q=p->next;

while(q!

=NULL)

{

free(p);

p=q;

q=q->next;

}

free(p);

}

intListEmpty(DLinkList*h)

{

return(h->next==NULL);

}

intListLength(DLinkList*h)

{

DLinkList*p=h;

inti=0;

while(p->next!

=NULL)

{

i++;

p=p->next;

}

return(i);

}

voidDispList(DLinkList*h)

{

DLinkList*p=h->next;

while(p!

=NULL)

{

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

p=p->next;

}

printf("\n");

}

intGetElem(DLinkList*h,inti,ElemType&e)

{

intj=0;

DLinkList*p=h;

while(j

=NULL)

{

i++;

p=p->next;

}

if(p==NULL)

return0;

else

e=p->data;

return1;

}

intLocateElem(DLinkList*h,ElemTypee)

{

intn=1;

DLinkList*p=h->next;

while(p!

=NULL&&p->data!

=e)

{

n++;

p=p->next;

}

if(p==NULL)

return0;

else

returnn;

}

intListInsert(DLinkList*&h,inti,ElemTypee)

{

intj=0;

DLinkList*p=h,*s;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{

s=(DLinkList*)malloc(sizeof(DLinkList));

s->data=e;

s->next=p->next;

if(p->next!

=NULL)p->next->prior=s;

s->prior=p;

p->next=s;

return1;

}

}

intListDelete(DLinkList*&h,inti,ElemType&e)

{

intj=0;

DLinkList*p=h,*q;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{

q=p->next;

if(q==NULL)

return0;

p->next=q->next;

if(p->next!

=NULL)p->next->prior=p;

free(q);

return1;

}

}

//实现双链表各种基本运算的算法.cpp

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("释放双链表h:

\n");

DestroyList(h);

}

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2