实验汇总.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;idata[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;jcin>>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;jcin>>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;icout<cout<}
intFirst=1;
voidQuickSort(intlow,inthigh,int*Key)
{
inti,j,Pivotkey;
i=low;j=high;
Pivotkey=Key[low];
while(lowwhile((lowhigh--;
if(low{
Key[low]=Key[high];
low++;
}
while((lowlow++;
if(low{
Key[high]=Key[low];
high--;
}
}
Key[low]=Pivotkey;
if(First)ShowSeqList(Key,j);
First=0;
if(iif(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;kfor(j=k;jif(v[j]>v[j+gab]){
temp=v[j];
v[j]=v[j+gab];
v[j+gab]=temp;
}
for(i=0;icout<cout<}
}
intmain(){
intT,t[100];
intI;
cin>>T;
for(i=0;icin>>t[i];
for(i=0;icout<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;ifor(j=0;jAdjMatrix[i][j]=e[i*n+j];
for(i=0;iVisited[i]=0;
}
voidDNSTraverse:
:
DFS(intv){
intj;
DFSNode[DFSNodeNo++]=v;
Visited[v]=1;
for(j=0;jif(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;mcin>>S;
for(i=0;i
for(j=0;j
cin>>e[i*S+j];
D->Create(e,S);
D->DFS(0);
for(i=0;iDFSNodeNo;i++)
cout<DFSNode[i]<<"";
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<Vertex[i]<<”(“<”;
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;jHT[i].code[j]=0;
}
}
voidShowHCode(intn)
{
inti;
for(i=1;icout<}
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]