数据结构编程docWord格式.docx

上传人:b****6 文档编号:15908345 上传时间:2022-11-17 格式:DOCX 页数:30 大小:37.10KB
下载 相关 举报
数据结构编程docWord格式.docx_第1页
第1页 / 共30页
数据结构编程docWord格式.docx_第2页
第2页 / 共30页
数据结构编程docWord格式.docx_第3页
第3页 / 共30页
数据结构编程docWord格式.docx_第4页
第4页 / 共30页
数据结构编程docWord格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

数据结构编程docWord格式.docx

《数据结构编程docWord格式.docx》由会员分享,可在线阅读,更多相关《数据结构编程docWord格式.docx(30页珍藏版)》请在冰豆网上搜索。

数据结构编程docWord格式.docx

structpnode*head;

structpnode*p1,*p2;

n=0;

p1=p2=(structpnode*)malloc(LEN);

scanf("

%d,%d"

&

p1->

exp,&

coef);

head=NULL;

while(p1->

coef!

=0)/*inputendflag*/

{

n=n+1;

if(n==1)head=p1;

elsep2->

link=p1;

p2=p1;

p1=(structpnode*)malloc(LEN);

}

p2->

link=NULL;

return(head);

}

voidprint(structpnode*head)/*输出一元多项式链表*/

structpnode*p;

printf("

\nNow,Thispnodeofyouinputis:

\n"

);

p=head;

if(head!

=NULL)

do

%dx^%d+"

p->

coef,p->

exp);

p=p->

link;

}while(p!

=NULL);

structpnode*padd(structpnode*heada,structpnode*headb)/*实现两个一元多项式链表加*/

structpnode*headc,*p,*q,*s,*r;

intx;

p=heada;

q=headb;

headc=(structpnode*)malloc(LEN);

r=headc;

while(p!

=NULL&

&

q!

if(p->

exp==q->

exp)/*,c*/

x=p->

coef+q->

coef;

if(x!

=0)

s=(structpnode*)malloc(LEN);

s->

coef=x;

exp=p->

exp;

r->

link=s;

r=s;

p=p->

q=q->

else/*,C*/

exp<

q->

exp)

coef=q->

/

exp=q->

else

coef=p->

=NULL)/*A*/

/*S*/

/*SC*/

while(q!

=NULL)/*B*/

/*link*/

s=headc;

/*C*/

headc=headc->

free(s);

return(headc);

main()

structpnode*heada,*headb,*headc;

Pleaseinputpnodeheada:

heada=creat();

print(heada);

Pleaseinputpnodeheadb:

headb=creat();

print(headb);

headc=padd(heada,headb);

print(headc);

 

(4)调试分析

以下下是输入、输出实例。

2,1

1,2

0,3

0,0

Now,Thispnodeofyouinputis:

1x^2+2x^1+3x^0

3,1

1x^3+2x^1+3x^0

1x^3+1x^2+4x^1+6x^0

3.背包问题

(1)需求分析

给定n种物品和背包。

物品i的重量是wi,其价值为vi,背包的容量为C。

应该如何选择装入背包的物品,使装入背包中物品的总价值最大?

(2)概要设计

改进的背包问题:

给定一个超递增序列和一个背包的容量,然后在超递增序列中选(只能选一次)或不选每一个数值,使得选中的数值的和正好等于背包的容量。

思路:

从最大的元素开始遍历超递增序列中的每个元素,若背包还有大于或等于当前元素值的空间,则放入,然后继续判断下一个元素;

若背包剩余空间小于当前元素值,则判断下一个元素。

程序流程图如下:

产生超递增序列

输出当前的超递增序列

遍历超递增序列中的每个元素

背包剩余空间还大于当前元素背包剩余空间小于当前元素值

放入,然后继续判断下一个元素判断下一个元素

得出所有已经选中的元素之和

超递增序列

(3)详细设计

#defineK10

#defineN10

stdlib.h>

conio.h>

voidcreate(longarray[],intn,intk)

{/*产生超递增序列*/

inti,j;

array[0]=1;

for(i=1;

i<

n;

i++)

longt=0;

for(j=0;

j<

i;

j++)

t=t+array[j];

array[i]=t+random(k)+1;

voidoutput(longarray[],intn)

{/*输出当前的超递增序列*/

inti;

for(i=0;

if(i%5==0)

%14ld"

array[i]);

voidbeibao(longarray[],intcankao[],longvalue,intcount)

{/*背包问题求解*/

longr=value;

for(i=count-1;

i>

=0;

i--)/*遍历超递增序列中的每个元素*/

if(r>

=array[i])/*如果当前元素还可以放入背包,即背包剩余空间还大于当前元素*/

r=r-array[i];

cankao[i]=1;

else/*背包剩余空间小于当前元素值*/

cankao[i]=0;

voidmain()

longarray[N];

intcankao[N]={0};

longvalue,value1=0;

clrscr();

create(array,N,K);

output(array,N);

\nInputthevalueofbeibao:

%ld"

value);

beibao(array,cankao,value,N);

N;

i++)/*所有已经选中的元素之和*/

if(cankao[i]==1)

value1+=array[i];

if(value==value1)

\nWehavegotasolution,thatis:

%13ld"

else

\nSorry.Wehavenotgotasolution.\n"

运行时显示:

18102242

901813607201443

Inputthevalueofbeibao:

输入1时:

1

Wehavegotasolution,thatis:

1

Pressanykeytocontinue...

输入5时:

5

Sorry.Wehavenotgotasolution.

输入50时:

50

842

输入500时:

500

90360

输入1000时:

1000

18

90181720

输入5000时:

5000

这时按任意键则返回编辑窗口

4.猴子选大王

一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

要求:

输入数据:

输入m,nm,n为整数,n<

m

输出形式:

中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能

基本思路是以链表顺序储存猴子的信息,利用计数器完成操作,最后打印出是第几个猴子

循环链表

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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