实验汇总.docx
- 文档编号:6551589
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:29
- 大小:19.14KB
实验汇总.docx
《实验汇总.docx》由会员分享,可在线阅读,更多相关《实验汇总.docx(29页珍藏版)》请在冰豆网上搜索。
实验汇总
容易:
①顺序表实验:
#include
usingnamespacestd;
classlist{
intdata[100];
intsize;
public:
voidcreate(int*a);
intfind(intj);
intinsert(intitem,intj);
intdel(intj);
intgetSize(){returnsize;}
};
voidlist:
:
create(int*a){
inti;
for(i=1;i<=a[0];i++)
data[i]=a[i];
size=a[0];
}
intlist:
:
find(inti){
returndata[i];
}
intlist:
:
insert(intitem,intj){
inti;
for(i=size+1;i>j;i--)
data[i]=data[i-1];
data[j]=item;
size++;
return1;
}
intlist:
:
del(intj){
inti;
for(i=j;i data[i]=data[i+1]; size--; return1; } intmain(){ intT,i,item,j; intt[100]; cin>>T; t[0]=T; for(i=1;i<=T;i++) cin>>t[i]; listli; li.create(t); for(i=1;i cout< cout< cin>>j; cout< cin>>j>>item; li.insert(item,j); for(i=1;i cout< cout< cin>>j; li.del(j); for(i=1;i cout< cout< return0; } ②顺序查找: #include usingnamespacestd; intmain(){ inttext,T,i,item,j; intt[100]; cin>>text; for(j=0;j cin>>T; for(i=1;i<=T;i++) cin>>t[i]; cin>>item; for(i=T;i>0;i--) if(t[i]==item) break; if(i>0) cout<<'1'<<""< else cout<<'0'<<""< } return0; } ③单链表实验: #include usingnamespacestd; classNode{ public: intdata; Node*next; Node(Node*ptrNext=NULL){ next=ptrNext; } Node(inti,Node*ptrNext=NULL){ data=i; next=ptrNext; } }; classlist{ Node*head; intsize; public: list(){head=newNode();size=0;} Node*index(inti); intfind(inti); intinsert(intitem,intj); intdel(intj); intgetSize(){returnsize;} }; Node*list: : index(inti){ if(i==0)returnhead; Node*p=head->next; intj; for(j=1;j =NULL;j++) p=p->next; returnp; } intlist: : find(inti){ Node*p=index(i); returnp->data; } intlist: : insert(intitem,intj){ Node*p=index(j-1); Node*q=newNode(item,p->next); p->next=q; size++; return1; } intlist: : del(intj){ Node*p=index(j-1); Node*q=index(j); p->next=q->next; deleteq; size--; return1; } intmain(){ intT,i,item,j,t[100]; listli; cin>>T; for(i=1;i<=T;i++) cin>>t[i]; for(i=1;i<=T;i++) li.insert(t[i],i); for(i=1;i cout< cout< cin>>j; cout< cin>>j>>item; li.insert(item,j); for(i=1;i cout< cout< cin>>j; li.del(j); for(i=1;i cout< cout< return0; } ④折半查找实验: #include usingnamespacestd; intmain(){ inttext,T,t[100],i,j; intlow,high,mid,key,count; cin>>text; for(j=0;j cin>>T; for(i=1;i<=T;i++) cin>>t[i]; low=1;high=T; count=0; cin>>key; while(low<=high){ count++; mid=(low+high)/2; if(t[mid]>key) high=mid-1; else if(t[mid] low=mid+1; else break; } if(low<=high) cout<<'1'<<""< else cout<<'0'<<""<<'0'<<""< } return0; } ⑤快速排序实验: #include usingnamespacestd; voidShowSeqList(int*Key,intn) { inti; for(i=1;i cout< cout< } intFirst=1; voidQuickSort(intlow,inthigh,int*Key) { inti,j,Pivotkey; i=low;j=high; Pivotkey=Key[low]; while(low while((low high--; if(low { Key[low]=Key[high]; low++; } while((low low++; if(low { Key[high]=Key[low]; high--; } } Key[low]=Pivotkey; if(First)ShowSeqList(Key,j); First=0; if(i if(high+1 } intmain() { inti,t,Key[100]; cin>>t; for(i=1;i<=t;i++) cin>>Key[i]; ShowSeqList(Key,t); QuickSort(1,t,Key); ShowSeqList(Key,t); return0; } ⑥希尔排序实验: #include usingnamespacestd; voidshellsort(int*v,intn){ intgab,I,k,j,temp; for(gab=n/2;gab>0;gab/=2){ for(i=n;i>0;i-=gab) for(k=0;k for(j=k;j if(v[j]>v[j+gab]){ temp=v[j]; v[j]=v[j+gab]; v[j+gab]=temp; } for(i=0;i cout< cout< } } intmain(){ intT,t[100]; intI; cin>>T; for(i=0;i cin>>t[i]; for(i=0;i cout< cout< shellsort(t,T); return0; } 较难: ⑦图的深度优先搜索实验: #include usingnamespacestd; classDNSTraverse{ intMaxNodeNo; intAdjMatrix[100][100]; intVisited[100]; public: intDFSNodeNo; intDFSNode[100]; voidCreate(int*e,intn); voidDFS(intv); }; voidDNSTraverse: : Create(int*e,intn){ inti,j; MaxNodeNo=n; DFSNodeNo=0; for(i=0;i for(j=0;j AdjMatrix[i][j]=e[i*n+j]; for(i=0;i Visited[i]=0; } voidDNSTraverse: : DFS(intv){ intj; DFSNode[DFSNodeNo++]=v; Visited[v]=1; for(j=0;j if(AdjMatrix[v][j]>0&&Visited[j]==0) DFS(j); } intmain(){ inte[100]; inti,j,m; intT,S; DNSTraverse*D=newDNSTraverse(); cin>>T; for(m=0;m cin>>S; for(i=0;i for(j=0;j cin>>e[i*S+j]; D->Create(e,S); D->DFS(0); for(i=0;i cout< cout< } return0; } ⑧最短路径实验: #include usingnamespacestd; #defineINFINITY100 #defineMAX100 typedefstruct { intVertexNum; charVertex[MAX]; intAdjMatrix[MAX][MAX]; }Graph; GraphMGraph; charPath[MAX][MAX]; intDest[MAX]; voidCreateGraph(Graph*G) { intI,j; cin>>G->VertexNum; for(i=1;i<=G->VertexNum;i++) cin>>G->Vertex[i]; for(i=1;i<=G->VertexNum;i++) for(j=1;j<=G->VertexNum;j++) cin>>G->AdjMatrix[i][j]; for(i=1;i<=G->VertexNum;i++) for(j=1;j<=G->VertexNum;j++) if(G->AdjMatrix[i][j]==-1) G->AdjMatrix[i][j]=INFINITY; } voidShortestPath(Graph*G,charStartVexChar) { intI,j,m,StartVex,CurrentVex,MinDest; intVisited[MAX]; for(i=1;i<=G->VertexNum;i++) { if(G->Vertex[i]==StartVexChar) { StartVex=I; break; } } for(i=1;i<=G->VertexNum;i++) { Path[i][0]=0; Dest[i]=INFINITY; if(G->AdjMatrix[StartVex][i] { Dest[i]=G->AdjMatrix[StartVex][i]; Path[i][1]=G->Vertex[StartVex]; Path[i][2]=G->Vertex[i]; Path[i][0]=2; } Visited[i]=’F’; } Dest[StartVex]=0; Visited[StartVex]=’T’; for(i=1;i<=G->VertexNum;i++) { MinDest=INFINITY; for(j=1;j<=G->VertexNum;j++) { if(Visited[j]==’F’&&Dest[j] { CurrentVex=j; MinDest=Dest[j]; } } Visited[CurrentVex]=’T’; for(j=1;j<=G->VertexNum;j++) { if((Visited[j]==’F’)&&(MinDest+G->AdjMatrix[CurrentVex][j] { Dest[j]=MinDest+G->AdjMatrix[CurrentVex][j]; for(m=0;m<=Path[CurrentVex][0];m++) Path[j][m]=Path[CurrentVex][m]; Path[j][0]++; Path[j][Path[j][0]]=G->Vertex[j]; } } } } voidShowPath(Graph*G) { intI,j; for(i=1;i<=G->VertexNum;i++) { cout< ”; if(Path[i][0]>0) { for(j=1;j<=Path[i][0];j++) { cout<<”“< } } cout< } } intmain(intargc,char*argv[]) { charStartVex; CreateGraph(&Mgraph); cin>>StartVex; ShortestPath(&Mgraph,StartVex); ShowPath(&Mgraph); return0; } 难: ⑨Huffman树: #include usingnamespacestd; #include #defineERROR-1 #defineCORRECT1 #defineMAXC15 #defineMAXH100 #defineMAXS100 typedefstruct { charc; intweight; intparent,lchild,rchild; charcode[MAXC]; }HTNode,*HuffmanTree; HTNodeHT[MAXH]; voidSelect(inti1,int*s1,int*s2) { unsignedintj,s; s=0; for(j=1;j<=i1;j++) { if(HT[j].parent==0) { if(s==0)s=j; if(HT[j].weight } } *s1=s; s=0; for(j=1;j<=i1;j++) { if((HT[j].parent==0)&&(j! =*s1)) { if(s==0)s=j; if(HT[j].weight } } *s2=s; } voidCreateHTree(intn,char*c,int*w) { inti,m,s1,s2; m=2*n-1; for(i=1;i<=n;++i) { HT[i].parent=HT[i].lchild=HT[i].rchild=0; HT[i].weight=w[i-1]; HT[i].c=c[i-1]; } for(;i<=m;++i) { HT[i].parent=HT[i].lchild=HT[i].rchild=HT[i].weight=0; } for(i=n+1;i<=m;++i) { Select(i-1,&s1,&s2); HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } } voidHCode(intn) { inti,j,m,c,f,start; charcd[MAXC]; m=MAXC; cd[m-1]=0; for(i=1;i<=n;i++) { start=m-1; for(c=i,f=HT[i].parent;f! =0;c=f,f=HT[f].parent) { if(HT[f].lchild==c)cd[--start]='0'; elsecd[--start]='1'; } for(j=0;j HT[i].code[j]=0; } } voidShowHCode(intn) { inti; for(i=1;i cout< } intShowHEncode(intn,char*eString) { inti,j; for(j=0;j { for(i=1;i<=n;i++) { if(eString[j]==HT[i].c) { cout< break; } } if(i>n)return(ERROR); } cout< return(CORRECT); } intShowHDecode(intn,char*dString) { inti,c; intRoot; Root=2*n-1; c=Root; for(i=0;i { if((HT[c].lchild==0)&&(HT[c].rchild==0)) { cout< c=Root; } if(dString[i]=='0') { if(HT[c].lchild==0)return(ERROR); c=HT[c].lchild; } else { if(HT[c].rchild==0)return(ERROR); c=HT[c].rchild; } } cout< return(CORRECT); } intmain() { inti,n; charc[MAXH]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 汇总