⑴ C++算法设计题,急求!!!
//practice32.cpp:.
//
#include"StdAfx.h"
#include<string.h>
#include<ctype.h>
#include<malloc.h>//malloc()等
#include<limits.h>//INT_MAX等
#include<stdio.h>//EOF(=^Z或F6),NULL
#include<stdlib.h>//atoi()
#include<io.h>//eof()
#include<math.h>//floor(),ceil(),abs()
#include<process.h>//exit()
#include<iostream.h>//cout,cin
//函数结果状态代码
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedefintStatus;//Status是函数的类型,其值是函数结果状态代码,如OK等
typedefintBoolean;//Boolean是布尔类型,其值是TRUE或FALSE
typedefintElemType;
//线性表的单链表存储结构
structLNode
{
ElemTypedata;
LNode*next;
};
typedefLNode*LinkList;//另一种定义LinkList的方法
//单链表线性表的基本操作(12个)
//操作结果:构造一个空的线性表L
StatusInitList(LinkList&L)
{
L=(LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点
if(!L)//存储分配失败
exit(OVERFLOW);
L->next=NULL;//指针域为空
returnOK;
}
//初始条件:线性表L已存在。操作结果:销毁线性表L
StatusDestroyList(LinkList&L)
{
LinkListq;
while(L)
{
q=L->next;
free(L);
L=q;
}
returnOK;
}
//初始条件:线性表L已存在。操作结果:将L重置为空表
StatusClearList(LinkListL)//不改变L
{
LinkListp,q;
p=L->next;//p指向第一个结点
while(p)//没到表尾
{
q=p->next;
free(p);
p=q;
}
L->next=NULL;//头结点指针域为空
returnOK;
}
//初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
StatusListEmpty(LinkListL)
{
if(L->next)
returnFALSE;
else
returnTRUE;
}
//初始条件:线性表L已存在。操作结果:返回L中数据元素个数
intListLength(LinkListL)
{
inti=0;
LinkListp=L->next;//p指向第一个结点
while(p)//没到表尾
{
i++;
p=p->next;
}
returni;
}
//L为带头结点的单链表的头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
StatusGetElem(LinkListL,inti,ElemType&e)
{
intj=1;//j为计数器
LinkListp=L->next;//p指向第一个结点
while(p&&j<i)//顺指针向后查找,直到p指向第i个元素或p为空
{
p=p->next;
j++;
}
if(!p||j>i)//第i个元素不存在
returnERROR;
e=p->data;//取第i个元素
returnOK;
}
Statuscompare(ElemTypea,ElemTypeb)
{
if(a==b)
return1;
else
return0;
}
//初始条件:线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)
//操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。
//若这样的数据元素不存在,则返回值为0
intLocateElem(LinkListL,ElemTypee)
{
LinkListp;
intj=0;
p=L->next;
while(p)
{
j++;
if(compare(p->data,e))
p=p->next;
returnj;
}
return0;
}
//初始条件:线性表L已存在
//操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,
//返回OK;否则操作失败,pre_e无定义,返回INFEASIBLE
StatusPriorElem(LinkListL,ElemTypecur_e,ElemType&pre_e)
{
LinkListp,q;
p=L->next;
while(p->next)
{
q=p->next;
if(q->data==cur_e)
{
pre_e=p->data;
returnOK;
}
p=q;
}
returnINFEASIBLE;
}
//初始条件:线性表L已存在
//操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,
//返回OK;否则操作失败,next_e无定义,返回INFEASIBLE
StatusNextElem(LinkListL,ElemTypecur_e,ElemType&next_e)
{
LinkListp,q;
p=L->next;
while(p->next)
{
if(p->data==cur_e)
{
next_e=p->next->data;
returnOK;
}
p=p->next;
}
returnINFEASIBLE;
}
//在带头结点的单链线性表L中第i个位置之前插入元素e
StatusListInsert(LinkListL,inti,ElemTypee)
{
intj=0;
LinkListp=L,s;
while(p&&j<i-1)//寻找第i-1个结点
{
p=p->next;
j++;
}
if(!p||j>i-1)//i小于1或者大于表长
returnERROR;
s=(LinkList)malloc(sizeof(LNode));//生成新结点
s->data=e;//插入L中
s->next=p->next;
p->next=s;
returnOK;
}
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
StatusListDelete(LinkListL,inti,ElemType&e)
{
LinkListp,q;
p=L;
intj=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1)
returnERROR;
q=p->next;
e=q->data;
p->next=q->next;
free(q);
returnOK;
}
//初始条件:线性表L已存在
//操作结果:依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败
StatusListTraverse(LinkListL)
{
LinkListp;
p=L->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf(" ");
returnOK;
}
//逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L
voidCreateList(LinkList&L,intn)
{
L=(LinkList)malloc(sizeof(LNode));
LinkListp;
L->next=NULL;
printf("请输入%d个数据 ",n);
for(inti=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));//生成新结点
scanf("%d",&p->data);//输入元素值
p->next=L->next;
L->next=p;
}
}
//正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
voidCreateList2(LinkList&L,intn)
{
inti;
LinkListp,q;
L=(LinkList)malloc(sizeof(LNode));//生成头结点
L->next=NULL;
q=L;
printf("请输入%d个数据 ",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
//已知单链线性表La和Lb的元素按值非递减排列。
//归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列
voidMergeList(LinkListLa,LinkList&Lb,LinkList&Lc)
{
LinkListpa=La->next,pb=Lb->next,pc;
Lc=pc=La;//用La的头结点作为Lc的头结点
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa==NULL)
pc->next=pb;
else
pc->next=pa;
free(Lb);//释放Lb的头结点
Lb=NULL;
}
intmain(intargc,char*argv[])
{
intn=5;
LinkListLa,Lb,Lc;
InitList(La);
printf("按非递减顺序,");
CreateList2(La,n);//正位序输入n个元素的值
printf("La=");//输出链表La的内容
ListTraverse(La);
intm,l;
printf("输入值的位置和值");
scanf("%d%d",&m,&l);
ListInsert(La,m,l);
printf("La=");//输出链表La的内容
ListTraverse(La);
printf(" 按非递增顺序,");
CreateList(Lb,n);//逆位序输入n个元素的值
printf("Lb=");//输出链表Lb的内容
ListTraverse(Lb);
MergeList(La,Lb,Lc);//按非递减顺序归并La和Lb,得到新表Lc
printf("Lc=");//输出链表Lc的内容
ListTraverse(Lc);
return0;
}
⑵ 求代写算法作业!(美国)
2430317689
⑶ 算法设计有哪些方法
算法设计常用的几种方法是
1.
穷举法
2.
贪心法
3.
分治法
4.
回溯法
5.
分枝限界法
6.
动态规划法
⑷ 谁能帮我做一下这道算法设计题啊,拜托了。
这个自己看看相关的代码就能写了,没必要找人求助,下面是资料
队列的http://blog.sina.com.cn/s/blog_622be9820100jjay.html
栈的http://blog.sina.com.cn/s/blog_8c5b746601019wxc.html
看过别人的代码后理解一下,然后自己想怎么实现题目要求
有不明白的地方可以问我
⑸ 算法设计练习
题目没有指定描述算法的计算机语言,这里以最普遍最基础的计算机语言——C语言。
代码如下图:
这是一段非常简单的程序,用伪代码描述毫无意义,这根本算不上算法。故直接给个完完整整的程序。
⑹ 急急急,正在做作业,算法设计题是要怎样做啊,写个C语言还是只写个中文步骤啊,或者都要啊
算法设计题只需要写出相应的数据结构和用文字描述的步骤。
如果你高兴,把步骤用伪代码描述更好。
对于这类题目,程序是绝对不需要的,千万不要写程序:即费时间,又没人看。
⑺ 算法设计题
(再版)
0-1背包问题
0-1背包问题:给定n种物品和一个背包。项目我的体重是无线网络,它的价格是vi背包容量C.
Q:我应该如何选择装载物品的背包,使得装入背包的总价值呢?
选择项目装入背包的每个项目我只有两种选择,即装入背包或不装入背包。项目i装入背包多次,不仅加载的项目我。
因此,这个问题被称为0-1背包问题。
?0-1解向量(X1,X2,...,XN),西安∈{0,1},1 <= I <= N。
动态编程解决方案:
集0-1背包问题给定的子最优值,M(I,J),M(我,j)是第j背包容量,可选择的项目我,我+1,...,N 0-1背包问题的最优值
无效背包()
INT I,J;
为(i = 0; I <=我+ +)
为(J = 0 J <= JMAX; J + +)
M [] [J] = 0;
(i = 0; <= n; i + + )
为(J = 0; <= JMAX; J + +)
(W [I]> J)
米[I] [J] = M [I-1] [J];
其他
M [] [J] = MAX(M [I-1] [J],M [I-1] [JW [我] + V [I]);
printf的(“%d \ N”,M [N] [C]); BR />
}
回溯解决方案:
无效1背包(I)
{
BR />(>),百视通= CV
其他
{
(CW + W [I] <= C )
{
CW + = W [我];
CV + = V [I];
背包(i +1);
CW-= W [I];
CV-= V [I];
}
a>
背包(+1);
}
}
⑻ c++作业代写 大二作业 最多用你5分钟啊
话说作业要自己动手
⑼ 计算机 算法设计题
1.(1)
存在常数c1,f(n)<=c1*s(n)
存在常数c2,g(n)<=c2*r(n)
令常数C=max(c1,c2)
则f(n)+g(n)<=c1*s(n)+c2*r(n)<=C*(s(n)+r(n))=O(s(n)+r(n))
1.(2)
令常数D=c1*c2
则f(n)*g(n)<=c1*s(n)*c2*r(n)=D*s(n)*r(n)=O(s(n)*r(n))