⑴ 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))