数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx

上传人:b****6 文档编号:20866308 上传时间:2023-01-26 格式:DOCX 页数:24 大小:18.66KB
下载 相关 举报
数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx_第1页
第1页 / 共24页
数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx_第2页
第2页 / 共24页
数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx_第3页
第3页 / 共24页
数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx_第4页
第4页 / 共24页
数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx

《数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案Word文件下载.docx

arrylist,n);

//输出插入后的结果

插入后的结果是\n"

for(i=0;

i<

arrylist.length;

i++)

{

printf("

%d"

arrylist.data[i]);

}

\n"

}

//创建线性表

voidcreatlist(NODE*arrylist)

inti;

输入有序的数据\n"

arrylist->

length;

scanf("

data[i]);

//对数值进行插入

voidinsertlist(NODE*arrylist,intn)

intj=arrylist->

if(n>

else

{

for(;

j>

i;

j--)

{

arrylist->

data[j]=arrylist->

data[j-1];

}

arrylist->

data[i]=n;

length++;

return;

}

arrylist->

data[arrylist->

length]=n;

/**************************************************

输入数据的个数

3

输入有序的数据

123

请输入要插入的数字

插入后的结果是

0123

Pressanykeytocontinue

*******************************************************************/

2.3

/*********************************************

将一个带头结点的数据域依次为a1a2a3a4.....an的链表进行逆置

实践:

************************************************/

stdlib.h>

typedefstructnode

intdata;

structnode*pNext;

//创建链表

voidcreatlist(NODE*pHead,intn);

voidtraverse(NODE*pHead);

voidprintlist(NODE*pHead);

intn;

NODE*pHead=(NODE*)malloc(sizeof(NODE));

if(NULL==pHead)

内存分配错误\n"

exit(-1);

pHead->

pNext=NULL;

输入节点的个数\n"

creatlist(pHead,n);

traverse(pHead);

转置后的数据是\n"

printlist(pHead);

voidcreatlist(NODE*pHead,intn)

NODE*pNew;

NODE*pNow=pHead;

 

输入数据\n"

n;

pNew=(NODE*)malloc(sizeof(NODE));

if(NULL==pNew)

printf("

内存分配失败\n"

exit(-1);

pNew->

pNew->

data);

pNow->

pNext=pNew;

pNow=pNew;

//进行转置

voidtraverse(NODE*pHead)

NODE*pNow;

NODE*pNew=pHead->

pNext;

while(pNew!

=NULL)

pNew=pNow->

pNext=pHead->

pHead->

pNext=pNow;

//进行输出

voidprintlist(NODE*pHead)

NODE*pNow=pHead->

//利用前叉法进行表的重建

while(NULL!

=pNow)

pNow->

pNow=pNow->

输入节点的个数

4

输入数据

1234

转置后的数据是

4321

***************************************/

2.4

/**********************************************

题目:

设有一个双链表,每个节点中除有prior,data和next三个域外,还有一个访问频度域,在链表被启用之前,其值均初始化为0

,每当进行定位操作时零元素值为x的节点中的frep域的值加一,并调整表中节点的次序,使其按访问频度的递减排列

以便使频繁访问的节点总是靠近表头,尝试编写符合上述要求的算法

设计:

时间:

**************************************************************************/

#definesize5//在这修改查找的次数

intfrep;

structnode*pRior;

//函数声明

NODE*initlist(void);

intlocatelist(NODE*pHead,inte);

voidInsertsort(NODE*pHead);

inte;

intpos;

intnumber=size;

NODE*pHead;

pHead=initlist();

输入节点个数\n"

你可以查找%d次数的位置\n"

number);

number;

输入要查找的数的\n"

e);

pos=locatelist(pHead,e);

//查找位置

if(0!

=pos)

你要查找的数据的位置是%d\n"

pos);

Insertsort(pHead);

//排序

查找后链表的次序\n"

printlist(pHead);

你输的数不存在,重新输入\n"

i--;

//对链表进行初始化

NODE*initlist(void)

pRior=NULL;

returnpHead;

voidcreatlist(NODE*pHead,intn)

分配内存失败\n"

frep=0;

pRior=pNow;

//对链表进行输出

节点的数据%d---"

被查的频率%d\n"

frep);

//对数据进行定位

intlocatelist(NODE*pHead,inte)

intpos=0;

while(pNow!

pos++;

if(pNow->

data==e)

pNow->

frep++;

returnpos;

if(NULL==pNow)

没有要查找的数据\n"

return0;

//对链表进行排序

voidInsertsort(NODE*pHead)

NODE*pNow1=pHead->

NODE*pNew=pHead;

NODE*pNow2;

if(NULL!

=pNow1)

pNow2=pNow1->

pNow1->

pNow1=pNow2;

while(NULL!

pNow2=pNow1->

pNew=pHead;

while(pNew->

pNext!

=NULL&

&

pNew->

pNext->

frep>

=pNow1->

frep)

pNew=pNew->

pNow1->

pNext=pNew->

pRior=pNew;

if(NULL!

=pNew->

pNext)

pNew->

pRior=pNow1;

pNew->

pNext=pNow1;

pNow1=pNow2;

/*****************************************************

输入节点个数

你可以查找5次数的位置

输入要查找的数的

1

你要查找的数据的位置是1

查找后链表的次序

节点的数据1---被查的频率1

节点的数据2---被查的频率0

节点的数据3---被查的频率0

节点的数据4---被查的频率0

2

你要查找的数据的位置是2

节点的数据2---被查的频率1

节点的数据2---被查的频率2

你要查找的数据的位置是3

节点的数据3---被查的频率1

节点的数据3---被查的频率2

*****************************************************/

2.5

/**************************************

设ha={a1,a2,a3,a4.....an},hb={b1,b2,b3,b4.....bn}是两个带头结点的循环单链表,将这两个表合并为带

头结点的循环单链表hc

2012.9.15

**************************************/

#definesize5//节点的个数

ints;

voidcreatlist(NODE*pHead);

voidmerge(NODE*pHead1,NODE*pHead2);

NODE*pHead1;

NODE*pHead2;

pHead1=(NODE*)malloc(sizeof(NODE*));

if(NULL==pHead1)

pHead1->

pHead2=(NODE*)malloc(sizeof(NODE*));

if(NULL==pHead2)

pHead2->

//创建链表

creatlist(pHead1);

creatlist(pHead2);

//在这里我的理解只是将两个链表简单的连在一起并没有,其他判断是否有相同数据的条件

merge(pHead1,pHead2);

输出连接后的链表\n"

printlist(pHead1);

voidcreatlist(NODE*pHead)

输入%d个数据\n"

size);

size;

if(i==size-1)

s=1;

s=0;

pNow->

pNext=pHead;

//将两个链表合并(合并到pHead1的后面)

voidmerge(NODE*pHead1,NODE*pHead2)

NODE*pNow2=pHead2->

NODE*pNew=pHead2->

NODE*pNow1=pHead1->

while(pNow1->

s!

=1)

pNow1=pNow1->

while(pNow2->

pNow2=pNow2->

pNow1->

pNow2->

pNext=pHead1;

free(pHead2);

//打印链表

while(pNow->

/******************************************\

输入5个数据

12345

67890

输出连接后的链表

1234567890

********************************************************/

2.6

/******************************************

设非空线性表ha,hb都用带头结点的循环双链表表示,设计一个算法Inset(ha,hb,i)

i=0,将线性表hb插到线性表ha的最前面;

当i>

0时,将线性表hb插入到线性表ha中第i个节点的

后面,当i大于等于线性表ha的长度,将线性表hb插入到线性表的最后面

设计;

****************************************************/

typedefstructd

}DATA;

intn;

voidcreatlist(DATA*elem);

voidInsertlist(DATA*elem,inti);

DATA*elem=(DATA*)malloc(sizeof(DATA));

if(NULL==elem)

elem->

pHead1=NULL;

pHead2=NULL;

creatlist(elem);

请输入插入的位置\n"

i);

Insertlist(elem,i);

if(i==0)

printlist(elem->

pHead2);

elseif(i>

0)

pHead1);

else

i应输入正值\n"

//创建非空链表

voidcreatlist(DATA*elem)

NODE*pNow,*pNew;

输入结点的个数\n"

//创建第一个链表

创建第一个链表\n"

if

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

当前位置:首页 > 医药卫生 > 临床医学

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

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