1、各种排序

#include<iostream>
using namespace std;
//-------直接插入排序
void InsertSort(ElemType A[],int n)
{
ElemType x;
int i,j;
for(i=;i<n;i++)
{
x=A[i];
for(j=i-;j>=;j--)
if(x.stn<A[j].stn) A[j+]=A[j];
else break;
A[j+]=x;
}
}
//----------------------
//-------希尔排序-----
void ShellSort(ElemType A[],int n)
{
ElemType x;
int i,j,d;
for(d=n/;d>=;d/=)
{
for(i=d;i<n;i++)
{
x=A[i];
for(j=i-d;j>=;j-=d)
{
if(x.stn<A[j].stn) A[j+d]=A[j];
else break;
}
A[j+d]=x;
}
}
}
///-----直接选择排序--
void SelectSort(ElemType A[],int n)
{
ElemType x;
int i,j,k;
for(i=;i<=n-;i++)
{
k=i-;
for(j=i;j<=n-;j++)
{
if(A[j].stn<A[k].stn) k=j;
}
if(k!=i-)
{
x=A[i-];A[i-]=A[k];A[k]=x;
}
}
}
//---------冒泡排序----------
void BubbleSort(ElemType A[],int n)
{
ElemType x;
int i,j,flag;
for(i=;i<=n-;i++)
{
flag=;
for(j=n-;j>=i;j--)
if(A[j].stn<A[j-].stn)
{
x=A[j-];A[j-]=A[j];A[j]=x;
flag=;
}
if(flag==) return;
}
}
int main()
{ return ;
}

2、邻接矩阵,外加克鲁斯卡尔,弗洛伊德,普里姆等算法,进行图的遍历,和最小生成树的处理

#include<iostream.h>
#include<stdlib.h>
#include<strstrea.h>
typedef int VertexType;
typedef int WeightType;
const int MaxEdgeNum=;
const int MaxVertexNum=;
const WeightType MaxValue=;
typedef VertexType vexlist[MaxVertexNum];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum];
struct edgenode
{
int adjvex;
WeightType weight;
edgenode*next;
};
typedef edgenode*adjlist[MaxVertexNum];
struct edge
{
int fromvex;
int endvex;
WeightType weight;
};
typedef edge edgeset[MaxEdgeNum];
//#include"4_01栈的顺序存储.cpp"
void PATH(edgenode*path[],int m,int j)
{
edgenode *p,*q,*s;
p=path[j];
while(p!=NULL)
{
path[j]=p->next;
delete p;
p=path[j];
}
p=path[m];
while(p!=NULL)
{
q=new edgenode;
q->adjvex=p->adjvex;
if(path[j]==NULL) path[j]=q;
else s->next=q;
s=q;
p=p->next;
}
q=new edgenode;
q->adjvex=j;
q->next=NULL;
s->next=q;
}
void Dijkstra(adjmatrix GA, int dist[],edgenode* path[], int i, int n)
{
int j,k,w,m;
bool* s=new bool[n];
//分别给s,dist和path数组赋初值
for(j=; j<n; j++) {
if(j==i) s[j]=true; else s[j]=false;
dist[j]=GA[i][j];
if(dist[j]<MaxValue && j!=i) {
edgenode* p1=new edgenode;
edgenode* p2=new edgenode;
p1->adjvex=i; p2->adjvex=j; p2->next=NULL;
p1->next=p2; path[j]=p1;
}
else
path[j]=NULL;
}
for(k=; k<=n-; k++)
{
//求出第k个终点m
w=MaxValue; m=i;
for(j=; j<n; j++)
if(s[j]==false && dist[j]<w) {
w=dist[j]; m=j;
}
if(m!=i) s[m]=true;
else break;
for(j=; j<n; j++)
if(s[j]==false && dist[m]+GA[m][j]<dist[j]) {
dist[j]=dist[m]+GA[m][j];
PATH(path, m, j);
}
}
} void Floyed(adjmatrix GA,adjmatrix A,int n)
{
int i,j,k;
for(i=;i<n;i++)
for(j=;j<n;j++)
A[i][j]=GA[i][j];
for(k=;k<n;k++)
for(i=;i<n;i++)
for(j=;j<n;j++){
if(i==k || j==k || i==j) continue;
if(
A[i][k]+A[k][j]<A[i][j])
A[i][j]=A[i][k]+A[k][j];
}
} void Prim(adjmatrix GA,edgeset CT,int n)
{
int i,j,k,min,t,m,w;
for(i=;i<n-;i++)
{
CT[i].fromvex=;
CT[i].endvex=i+;
CT[i].weight=GA[][i+];
}
for(k=;k<n;k++)
{
min=MaxValue;
m=k-;
for(j=k-;j<n-;j++)
if(CT[j].weight<min)
{
min=CT[j].weight;
m=j;
}
edge temp=CT[k-];
CT[k-]=CT[m];
CT[m]=temp;
j=CT[k-].endvex;
for(i=k;i<n-;i++)
{
t=CT[i].endvex;
w=GA[j][t];
if(w<CT[i].weight)
{
CT[i].weight=w;
CT[i].fromvex=j;
}
}
}
}
void Kruskal(edgeset GE,edgeset CT,int n)
{
int i,j;
bool**s=new bool*[n];
for(i=;i<n;i++)
s[i]=new bool[n];
for(i=;i<n;i++)
{
for(j=;j<n;j++)
if(i==j) s[i][j]=true;
else s[i][j]=false;
}
int k=;
int d=;
int m1,m2;
while(k<n)
{
for(i=;i<n;i++)
{
if(s[i][GE[d].fromvex]==true) m1=i;
if(s[i][GE[d].endvex]==true) m2=i;
}
if(m1!=m2)
{
CT[k-]=GE[d];
k++;
for(j=;j<n;j++)
{
s[m1][j]=s[m1][j]||s[m2][j];
s[m2][j]=false;
}
}
d++;
}
for(i=;i<n;i++)
delete[]s[i];
delete[]s;
}
//边集数组 void InitArray(edgeset GE)
{
for(int i=;i<MaxEdgeNum;i++)
{
GE[i].fromvex=GE[i].endvex=-;
GE[i].weight=MaxValue;
}
}
void CreateArray(edgeset GE,int n,char*s,int k)
{
istrstream sin(s);
char c1,c2,c3;
int i,j,c=;
WeightType w;
sin>>c1;
if(k==){
do{
sin>>c1>>i>>c2>>j>>c3;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=;
c++;
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=w;
c++;
sin>>c1;
}while(c1==',');
}
}
void Arry(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex==j&&!visited[j])
{
cout<<j<<" ";
visited[j]=true;
j=GE[t].endvex;
k++;
break;
}
}
if(GE[t].fromvex==-)
{
cout<<j<<" ";
k++;
}
}
}
void Arry2(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
int q[];
int front=,rear=;
cout<<j<<" ";
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex=j&&!visited[j])
{
cout<<GE[t].endvex<<" ";
k++;
q[rear]=GE[t].endvex;
rear=(rear+)%;
}
else
{
visited[j]=true;
j=q[front];
front=(front+)%;
break;
}
}
}
} void InitAdjoin(adjlist GL)
{
for(int i=;i<MaxVertexNum;i++)
GL[i]=NULL;
}
void CreateAdjoin(adjlist GL,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
edgenode*p;
sin>>c1;
if(k2==){
do{
sin>>c1>>i>>c2>>j>>c3;
p=new edgenode; p->adjvex=j;p->weight=;
p->next=GL[i];
GL[i]=p;
if(k1==){
p=new edgenode;
p->adjvex=i;p->weight=;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
p=new edgenode;
p->adjvex=j;p->weight=w;
p->next=GL[i];
GL[i]=p;
if(k1==)
{
p=new edgenode;
p->adjvex=i;p->weight=w;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
} void InitMatrix(adjmatrix GA,int k)
{
int i,j;
for(i=;i<MaxVertexNum;i++)
for(j=;j<MaxVertexNum;j++)
if(i==j) GA[i][j]=;
else if(k) GA[i][j]=MaxValue;
else GA[i][j]=;
}
void CreateMatrix(adjmatrix GA,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
sin>>c1;
if(k1==&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=GA[j][i]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1==&&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=GA[j][i]=w;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=w;
sin>>c1;
if(c1==')')break;
}while();
}
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
int j=i;
visited[i]=true;
cout<<j<<" ";
Push(M,j);
while(j!=n||M.top!=)
{
if(j==n+)
{
j=M.stack[M.top];
M.top--;
}
if(GA[M.stack[M.top]][j]!=&&!visited[j])
{
visited[j]=true;
Push(M,j);
cout<<j<<" ";
j=;
}
else
j++;
}
} /*void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
cout<<i<<" ";
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL)
{
int j=p->adjvex;
if(!visited[j])
dfsAdjoin(GL,j,n,visited);
p=p->next;
}
}*/
void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
cout<<i<<" ";
Push(M,i);
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL||M.top!=)
{
if(p==NULL)
{
M.top--;
p=GL[M.stack[M.top]];
}
int j=p->adjvex; if(!visited[j])
{
visited[j]=true;
cout<<j<<" ";
Push(M,j);
p=GL[M.stack[M.top]];
}
else
{
p=p->next;
}
}
} int main()
{
int i,n,k1,k2;
cout<<"输入待处理图的顶点数:";
cin>>n;
cout<<"输入图的有向和有无权选择(0为无,非0为有):";
cin>>k1>>k2;
bool*visited=new bool[n];
adjmatrix ga;
InitMatrix(ga,k2);
cout<<"输入图的边集;";
char*a=new char[];
cin>>a;
CreateMatrix(ga,n,a,k1,k2);
cout<<"按图的邻接矩阵得到的深度优先遍历序列:"<<endl;
for(i=;i<n;i++)
visited[i]=false;
dfsMatrix(ga,,n,visited);
cout<<endl;
cout<<"按图的邻接表得到的深度优先遍历序列:"<<endl;
adjlist ka;
InitAdjoin(ka);
CreateAdjoin(ka,n,a,k1,k2);
for(i=;i<n;i++)
visited[i]=false;
dfsAdjoin(ka,,n,visited);
cout<<endl;
for(i=;i<n;i++)
visited[i]=false;
edgeset ke;
InitArray(ke);
CreateArray(ke,n,a,);
//Arry(ke,0,n,visited);
//cout<<endl;
//for(i=0;i<n;i++)
visited[i]=false;
//Arry2(ke,0,n,visited); return ;
}

3、栈的顺序存储

//typedef int ElemType;
/*struct Stack
{
ElemType *stack;
int top;
int MaxSize;
};*/ //1. 初始化栈S为空
void InitStack(Stack& S)
{
//初始设置栈空间大小为10
S.MaxSize=;
//动态存储空间分配
S.stack=new ElemType[S.MaxSize];
if(!S.stack){
cout<<"动态存储分配失败!"<<endl;
exit();
}
//初始置栈为空
S.top=-;
}
//2. 元素item进栈,即插入到栈顶
void Push(Stack& S, ElemType item)
{
//若栈空间用完则自动扩大2倍空间,原有栈内容不变
if(S.top==S.MaxSize-) {
int k=sizeof(ElemType); //计算每个元素存储空间的长度
S.stack=(ElemType*)realloc(S.stack, *S.MaxSize*k);
S.MaxSize=*S.MaxSize; //把栈空间大小修改为新的长度
}
//栈顶指针后移一个位置
S.top++;
//将新元素插入到栈顶
S.stack[S.top]=item;
}
//3. 删除栈顶元素并返回
ElemType Pop(Stack& S)
{
//若栈空则退出运行
if(S.top==-) {
cout<<"栈空,退出运行!"<<endl;
exit();
}
//栈顶指针减1表示退栈
S.top--;
//返回原栈顶元素的值
return S.stack[S.top+];
}
//4. 读取栈顶元素的值
ElemType Peek(Stack& S)
{
//若栈空则退出运行
if(S.top==-) {
cout<<"Stack is empty!"<<endl;
exit();
}
//返回栈顶元素的值
return S.stack[S.top];
}
//5. 判断栈是否为空
bool EmptyStack(Stack& S)
{
return S.top==-;
}
//6. 清除栈中的所有元素并释放动态存储空间
void ClearStack(Stack& S)
{
if(S.stack) {
delete []S.stack;
S.stack=;
}
S.top=-;
S.MaxSize=;
}

4、边集数组深度优先搜索

void Arry(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex==j&&!visited[j])
{
cout<<j<<" ";
visited[j]=true;
j=GE[t].endvex;
k++;
break;
}
}
if(GE[t].fromvex==-)
{
cout<<j<<" ";
k++;
}
}
}

5、非递归邻接表

void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
cout<<i<<" ";
Push(M,i);
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL||M.top!=)
{
if(p==NULL)
{
M.top--;
p=GL[M.stack[M.top]];
}
int j=p->adjvex; if(!visited[j])
{
visited[j]=true;
cout<<j<<" ";
Push(M,j);
p=GL[M.stack[M.top]];
}
else
{
p=p->next;
}
}
}

6、非递归链接矩阵

void dfsMatrix(adjmatrix GA,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
int j=i;
visited[i]=true;
cout<<j<<" ";
Push(M,j);
while(j!=n||M.top!=)
{
if(j==n+)
{
j=M.stack[M.top];
M.top--;
}
if(GA[M.stack[M.top]][j]!=&&!visited[j])
{
visited[j]=true;
Push(M,j);
cout<<j<<" ";
j=;
}
else
j++;
}
}

7、哈夫曼编码

#include<iostream>
using namespace std;
#include<stdlib.h>
#include<fstream>
#include<string>
typedef int ElemType;
struct save
{
char a2[];
int lenth;
};
save minma[];
struct BTreeNode
{
ElemType data;
BTreeNode*left;
BTreeNode*right;
};
int count=;
BTreeNode*CreateHuffman(ElemType a[],int n)
{
BTreeNode**b,*q;
b=new BTreeNode*[n];
int i,j;
for(i=;i<n;i++)
{
b[i]=new BTreeNode;
b[i]->data=a[i];b[i]->left=b[i]->right=NULL;
}
for(i=;i<n;i++)
{
int k1=-,k2;
for(j=;j<n;j++)
{
if(b[j]!=NULL&&k1==-) {k1=j;continue;}
if(b[j]!=NULL) {k2=j;break;}
}
for(j=k2;j<n;j++)
{
if(b[j]!=NULL)
{
if(b[j]->data<b[k1]->data) {k2=k1;k1=j;}
else if(b[j]->data<b[k2]->data) k2=j;
}
}
q=new BTreeNode;
q->data=b[k1]->data+b[k2]->data;
q->left=b[k1];q->right=b[k2];
b[k1]=q;b[k2]=NULL;
}
delete []b;
return q;
}
void HuffManCoding(BTreeNode*FBT,int len)
{
static char a[];
if(FBT!=NULL)
{
if(FBT->left==NULL&&FBT->right==NULL)
{
for(int i=;i<len;i++)
{
minma[count].a2[i]=a[i];
}
minma[count].lenth=len;
count++;
}
else{
a[len]=;HuffManCoding(FBT->left,len+);
a[len]=;HuffManCoding(FBT->right,len+);
}
}
}
int main()
{
BTreeNode *m;
char a1[];
for(int i=;i<;i++)
{
a1[i]=+i;
}
int a3[];
ifstream f1("新建文本文档.txt",ios::out);
int j;
i=;
while(!f1.eof())
if(f1>>j) a3[i++]=j;
m=CreateHuffman(a3,);
HuffManCoding(m,);
int total=;
cout<<"请输入一串字符"<<endl;
char s1[];
cin>>s1;
cout<<"它们所对应的密文分别是"<<endl;
char *q=s1;
while(q[total]!='\0')
total++;
for(i=;i<total;i++)
{
for(j=;j<;j++)
{
if(s1[i]==a1[j])
{
for(int k=;k<minma[j].lenth;k++)
cout<<(int)minma[j].a2[k]<<" ";
cout<<endl;
}
} } return ;
}
"新建文本文档.txt"
23 45 12 87 103 54 99 46 97 82 98 65 38 84 56 55 78 77 47 73 91 86 4 5 40 3 8、邻接矩阵与邻接表
#include<iostream.h>
#include<stdlib.h>
#include<strstrea.h>
typedef int VertexType;
typedef int WeightType;
const int MaxEdgeNum=;
const int MaxVertexNum=;
const WeightType MaxValue=;
typedef VertexType vexlist[MaxVertexNum];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum];
#include"4_01栈的顺序存储.cpp"
void Prim(adjmatrix GA,edgest CT,int n)
{
int i,j,k,min,t,m,w;
for(i=;i<n-;i++)
{
CT[i].fromvex=;
CT[i].endvex=i+;
CT[i].weight=GA[][i+];
}
for(k=;k<n;k++)
{
min=MaxValue;
m=k-;
for(j=k-;j<n-;j++)
if(CT[j].weight<min)
{
min=CT[j].weight;
m=j;
}
edge temp=CT[k-];
CT[k-]=CT[m];
CT[m]=temp;
j=CT[k-].endvex;
for(i=k;i<n-;i++)
{
t=CT[i].endvex;
w=GA[j][t];
if(w<CT[i].weight)
{
CT[i].weight=w;
CT[i].fromvex=j;
}
}
}
}
void Kruskal(edgeset GE,edgeset CT,int n)
{
int i,j;
bool**s=new bool*[n];
for(i=;i<n;i++)
s[i]=new bool[n];
for(i=;i<n;i++)
{
for(j=;j<n;j++)
if(i==j) s[i][j]=true;
else s[i][j]=false;
}
int k=;
int d=;
int m1,m2;
while(k<n)
{
for(i=;i<n;i++)
{
if(s[i][GE[d].fromvex]==true) m1=i;
if(s[i][GE[d].endvex]==true) m3=i;
}
if(m1!=m2)
{
CT[k-]=GE[d];
k++;
for(j=;j<n;j++)
{
s[m1][j]=s[m1][j]||s[m2][j];
s[m2][j]=false;
}
}
d++;
}
for(i=;i<n;i++)
delete[]s[i];
delete[]s;
}
//边集数组
struct edge
{
int fromvex;
int endvex;
WeightType weight;
};
typedef edge edgeset[MaxEdgeNum];
void InitArray(edgeset GE)
{
for(int i=;i<MaxEdgeNum;i++)
{
GE[i].fromvex=GE[i].endvex=-;
GE[i].weight=MaxValue;
}
}
void CreateArray(edgeset GE,int n,char*s,int k)
{
istrstream sin(s);
char c1,c2,c3;
int i,j,c=;
WeightType w;
sin>>c1;
if(k==){
do{
sin>>c1>>i>>c2>>j>>c3;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=;
c++;
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=w;
c++;
sin>>c1;
}while(c1==',');
}
}
void Arry(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex==j&&!visited[j])
{
cout<<j<<" ";
visited[j]=true;
j=GE[t].endvex;
k++;
break;
}
}
if(GE[t].fromvex==-)
{
cout<<j<<" ";
k++;
}
}
}
void Arry2(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
int q[];
int front=,rear=;
cout<<j<<" ";
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex=j&&!visited[j])
{
cout<<GE[t].endvex<<" ";
k++;
q[rear]=GE[t].endvex;
rear=(rear+)%;
}
else
{
visited[j]=true;
j=q[front];
front=(front+)%;
break;
}
}
}
} struct edgenode
{
int adjvex;
WeightType weight;
edgenode*next;
};
typedef edgenode*adjlist[MaxVertexNum];
void InitAdjoin(adjlist GL)
{
for(int i=;i<MaxVertexNum;i++)
GL[i]=NULL;
}
void CreateAdjoin(adjlist GL,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
edgenode*p;
sin>>c1;
if(k2==){
do{
sin>>c1>>i>>c2>>j>>c3;
p=new edgenode; p->adjvex=j;p->weight=;
p->next=GL[i];
GL[i]=p;
if(k1==){
p=new edgenode;
p->adjvex=i;p->weight=;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
p=new edgenode;
p->adjvex=j;p->weight=w;
p->next=GL[i];
GL[i]=p;
if(k1==)
{
p=new edgenode;
p->adjvex=i;p->weight=w;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
} void InitMatrix(adjmatrix GA,int k)
{
int i,j;
for(i=;i<MaxVertexNum;i++)
for(j=;j<MaxVertexNum;j++)
if(i==j) GA[i][j]=;
else if(k) GA[i][j]=MaxValue;
else GA[i][j]=;
}
void CreateMatrix(adjmatrix GA,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
sin>>c1;
if(k1==&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=GA[j][i]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1==&&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=GA[j][i]=w;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=w;
sin>>c1;
if(c1==')')break;
}while();
}
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
int j=i;
visited[i]=true;
cout<<j<<" ";
Push(M,j);
while(j!=n||M.top!=)
{
if(j==n+)
{
j=M.stack[M.top];
M.top--;
}
if(GA[M.stack[M.top]][j]!=&&!visited[j])
{
visited[j]=true;
Push(M,j);
cout<<j<<" ";
j=;
}
else
j++;
}
} /*void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
cout<<i<<" ";
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL)
{
int j=p->adjvex;
if(!visited[j])
dfsAdjoin(GL,j,n,visited);
p=p->next;
}
}*/
void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
cout<<i<<" ";
Push(M,i);
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL||M.top!=)
{
if(p==NULL)
{
M.top--;
p=GL[M.stack[M.top]];
}
int j=p->adjvex; if(!visited[j])
{
visited[j]=true;
cout<<j<<" ";
Push(M,j);
p=GL[M.stack[M.top]];
}
else
{
p=p->next;
}
}
} int main()
{
int i,n,k1,k2;
cout<<"输入待处理图的顶点数:";
cin>>n;
cout<<"输入图的有向和有无权选择(0为无,非0为有):";
cin>>k1>>k2;
bool*visited=new bool[n];
adjmatrix ga;
InitMatrix(ga,k2);
cout<<"输入图的边集;";
char*a=new char[];
cin>>a;
CreateMatrix(ga,n,a,k1,k2);
cout<<"按图的邻接矩阵得到的深度优先遍历序列:"<<endl;
for(i=;i<n;i++)
visited[i]=false;
dfsMatrix(ga,,n,visited);
cout<<endl;
cout<<"按图的邻接表得到的深度优先遍历序列:"<<endl;
adjlist ka;
InitAdjoin(ka);
CreateAdjoin(ka,n,a,k1,k2);
for(i=;i<n;i++)
visited[i]=false;
dfsAdjoin(ka,,n,visited);
cout<<endl;
for(i=;i<n;i++)
visited[i]=false;
edgeset ke;
InitArray(ke);
CreateArray(ke,n,a,);
Arry(ke,,n,visited);
cout<<endl;
for(i=;i<n;i++)
visited[i]=false;
Arry2(ke,,n,visited); return ;
}

9、迷宫程序

#include<iostream>
#include <windows.h>
#include<ctime>
#include<cstdlib>
#include<string>
using namespace std;
const int m=,n=;
char maze[m+][n+];
char mark[m+][n+];
int move[][]={{,},{,},{,-},{-,}};
struct position
{
int a;
int b;
};
typedef position ElemType;
struct Stack
{
ElemType *stack;
int top;
int MaxSize;
};
#include"4_01栈的顺序存储.cpp"
void output(ElemType &t)
{
cout<<"("<<t.a<<" "<<t.b<<")"<<endl;
}
bool SeekPath(int x,int y)
{
Stack M;
InitStack(M);
int i,j,k=,t;
ElemType item1,item2;
int g=x,h=y;
item1.a=g;
item1.b=h;
Push(M,item1);
mark[g][h]=;
while((g!=m)||(h!=n))
{
item1.a=g;
item1.b=h;
k=;
for(i=;i<;i++)
{
g=g+move[i][];h=h+move[i][];
if((maze[g][h]==)&&(mark[g][h]==))
{
maze[g][h]=;
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
{
cout<<maze[i][j]<<" ";
}
cout<<endl;
}
Sleep();
system("cls");
Sleep();
mark[g][h]=;
item2.a=g;
item2.b=h;
Push(M,item2);break;
}
else
{
k++;
g=item1.a;
h=item1.b;
}
} if((g==)&&(h==)&&(k==))
{
cout<<"失败"<<endl;
t=;
break;
}
if(k==)
{
g=M.stack[M.top-].a;
h=M.stack[M.top-].b;
M.top--;
}
}
if(t!=)
{
while(M.top!=-)
{
output(M.stack[M.top]);
M.top--;
}
return true;
}
else
return false;
}
int main()
{
int i,j;
for(i=;i<m+;i++)
maze[][i]=;
for(j=;j<n+;j++)
maze[j][i-]=;
for(i=;i<m+;i++)
maze[j-][i]=;
for(j=;j<m+;j++)
maze[j][]=;
srand(unsigned(time()));
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
{
double some=(rand()%)/10.0;
if(some>0.25)
maze[i][j]=;
else
maze[i][j]=;
}
}
maze[m][n]=;
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
mark[i][j]=;
}
mark[][]=;
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
{
cout<<maze[i][j]<<" ";
}
cout<<endl;
}
SeekPath(,);
return ;
}

10、图实现教学楼的寻找

#include<iostream>
#include<strstrea.h>
#include<fstream>
#include<string>
using namespace std;
typedef int VertexType;
typedef int WeightType;
const int MaxVertexNum=;
const int MaxEdgeNum=;
const WeightType MaxValue=;
typedef VertexType vexlist[MaxVertexNum];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum]; void InitMatrix(adjmatrix GA,int k)
{
int i,j;
for(i=;i<MaxVertexNum;i++)
for(j=;j<MaxVertexNum;j++)
if(i==j) GA[i][j]=;
else if(k) GA[i][j]=MaxValue;
else GA[i][j]=;
}
void CreateMatrix(adjmatrix GA,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
sin>>c1;
if(k1==&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=GA[j][i]=;
sin>>c1;
if(c1==')') break;
}while();
else if(k1==&&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=GA[j][i]=w;
sin>>c1;
if(c1==')') break;
}while();
else if(k1!=&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=;
sin>>c1;
if(c1==')') break;
}while();
else if(k1!= &&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=w;
sin>>c1;
if(c1==')') break;
}while();
}
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited,string a[])
{
std::cout<<a[i]<<" ";
visited[i]=true;
for(int j=;j<n;j++)
if(GA[i][j]!= && GA[i][j]!=MaxValue && !visited[j])
dfsMatrix(GA,j,n,visited,a);
}
void Prim(adjmatrix GA,edgeset CT,int n)
{
int i,j,k,min,t,m,w;
for(i=;i<n-;i++)
{
CT[i].fromvex=;
CT[i].endvex=i+;
CT[i].weight=GA[][i+];
}
for(k=;k<n;k++}
{
min=MaxValue;
m=k-;
for(j=k-;j<m-;j++)
{
if(CT[j].weight<min)
{
min=CT[j].weight;
m=j;
}
edge temp=CT[k-];
CT[k-]=CT[m];
CT[m]=temp;
j=CT[k-].endvex;
for(i=k;i<n-;i++)
{
t=CT[i].endvex;
w=GA[j][t];
if(w<CT[i].weight)
{
CT[i].weight=w;
CT[i].fromvex=j;
}
}
}
} int main()
{ string a[];
int i=;
adjmatrix A;
ifstream f1("新建文本文档 (2).txt",ios::out);
if(!f1)
{
std::cout<<"新建文本文档 (2).txt do not found";
exit();
}
string s;
while(!f1.eof())
if(f1>>s) a[i++]=s;
InitMatrix(A,);
char *s1;
s1=new char [];
ifstream f2("新建文本文档 (3).txt",ios::out);
if(!f2)
{
std::cout<<"新建文本文档 (3).txt do not found";
exit();
}
char m;
i=;
while(!f2.eof())
if(f2>>m) s1[i++]=m;
/*for(i=0;i<62;i++)
std::cout<<s1[i];*/
CreateMatrix(A,,s1,,);
bool *visited=new bool [];
for(i=;i<;i++)
visited[i]=false;
dfsMatrix(A,,,visited,a); return ;
}

新建文本文档(2)

主楼 博雅楼 知行楼 三舍 图书馆 致远楼 新华楼 中和楼

新建文本文档(3)

( ( 0 , 6 ) 2 ,( 0 , 2 ) 4 ,( 0 , 5 ) 1 ,( 0 , 3 ) 1 ,( 1 , 5 ) 2 ,( 1 , 7 ) 1 ,( 2 , 4 ) 3 ,( 3 , 6 ) 2 ,( 6 , 7 ) 3 )

11、拓补排序

void Toposort(adjlilst GL,int n)
{
int i,j,k,top,m=;
edgenode*p;
int *d=new int[n];
for(i=;i<n;i++)
d[i]=;
for(i=;i<n;i++)
{
p=GL[i];
while(p!=NULL)
{
j=p->adjvex;d[j]++;p=p->next;
}
}
top=-;
for(i=;i<n;i++)
if(d[i]==) {d[i]=top;top=i;}
while(top!=-)
{
j=top;
top=d[top];
cout<<j<<" ";
m++;
p=GL[j];
while(p!=NULL)
{
k=p->adjvex;
d[k]--;
if(d[k]==)
{
d[k]=top;top=k;
}
p=p->next;
}
}
cout<<endl;
if(m<n) cout<<"The network has a cycle!"<<endl;
delete []d;
}

12、稀疏矩阵的转置乘法与加法

#include<iostream>
using namespace std;
typedef int ElemType;
struct Triple
{
int row,col;
ElemType val;
};
struct SMatrix
{
int m,n,t;
Triple sm[];
};
void InitMatrix(SMatrix & M)
{
M.m=;
M.n=;
M.t=;
}
void InputMatrix(SMatrix &M,int m,int n)
{
M.m=m;
M.n=n;
int row,col,val;
int k=;
cin>>row>>col>>val;
while(row!=)
{
k++;
M.sm[k].row=row;
M.sm[k].col=col;
M.sm[k].val=val;
cin>>row>>col>>val;
}
M.t=k;
}
SMatrix FastTranspose(SMatrix &M)
{
SMatrix S;
InitMatrix(S);
S.m=M.n; S.n=M.m; S.t=M.t;
if(S.t==) return S;
int* num=new int[M.n+];
int* pot=new int[M.n+];
int col,i;
for(col=;col<=M.n;col++)
num[col]=;
for(i=;i<=M.t;i++)
{
int j=M.sm[i].col;
num[j]++;
}
pot[]=;
for(col=;col<=M.n;col++)
pot[col]=pot[col-]+num[col-];
for(i=;i<=M.t;i++)
{
int j=M.sm[i].col;
int k=pot[j];
S.sm[k].row=j;
S.sm[k].col=M.sm[i].row;
S.sm[k].val=M.sm[i].val;
pot[j]++;
}
delete[] num;
delete[] pot;
return S;
}
void output(SMatrix &M)
{
int k=;
for(int i=;i<=M.m;i++)
{
for(int j=;j<=M.n;j++)
{
if((M.sm[k].row==i)&&(M.sm[k].col==j))
{
cout<<M.sm[k].val<<" ";
k++;
}
else
cout<<""<<" ";
}
cout<<endl;
}
}
SMatrix Add(SMatrix& M1,SMatrix& M2)
{
SMatrix M;
InitMatrix(M);
if((M1.m!=M2.m)||(M1.n!=M2.n))
{
cout<<"两矩阵规格不一样"<<endl;
exit();
}
M.m=M1.m;M.n=M1.n;
if((M1.t==)&&(M2.t==))
return M;
int k,t=;
for(k=;k<=M1.t;k++)
{
if((M1.sm[k].row==M2.sm[k].row)&&(M1.sm[k].col=M2.sm[k].col))
{
M.sm[t].row=M1.sm[k].row;
M.sm[t].col=M1.sm[k].col;
M.sm[t].val=M1.sm[k].val+M2.sm[k].val;
t++;
}
else
{
if(M1.sm[k].val==)
{
M.sm[t].row=M1.sm[k].row;
M.sm[t].col=M1.sm[k].col;
M.sm[t].val=M2.sm[k].val;
}
else
{
if(M2.sm[k].val==)
{
M.sm[t].row=M2.sm[k].row;
M.sm[t].col=M2.sm[k].col;
M.sm[t].val=M1.sm[k].val;
}
}
t++;
}
M.t=t;
}
return M;
}
SMatrix chengfa(SMatrix &M1,SMatrix &M2)
{
SMatrix M3;
InitMatrix(M3);
M3.n=M1.m;
M3.m=M2.n;
if(M1.n!=M2.m)
cout<<"两矩阵不能相乘"<<endl;
else
{
int h=;
for(int i=;i<=M1.m;i++)
{
for(int j=;j<=M2.n;j++)
{
int sum=;
for(int t=;t<=M1.t;t++)
{
for(int k=;k<=M2.t;k++)
{
if((M1.sm[t].row==i)&&(M2.sm[k].col==j))
if(M2.sm[k].row==M1.sm[t].col)
sum+=M1.sm[t].val*M2.sm[k].val;
else
sum+=;
else
sum+=;
}
}
h++;
M3.sm[h].val=sum;
M3.sm[h].row=i;
M3.sm[h].col=j;
}
}
M3.t=h;
}
return M3;
}
int main()
{
cout<<"请选择操作序号"<<endl;
cout<<"1 转质 2 加法 3 乘法"<<endl;
char a;
cin>>a;
switch(a)
{
case '':
{
SMatrix p;
InitMatrix(p);
int m,n;
cout<<"请输入稀疏矩阵的行数和列数"<<endl;
cin>>m>>n;
cout<<"请输入非零元素所在行数 列数 元素值 输入完后以 0 0 0结束"<<endl;
InputMatrix(p,m,n);
output(FastTranspose(p));
};break;
case '':
{
SMatrix a,b;
InitMatrix(a);
cout<<"请输入稀疏矩阵1的行数和列数"<<endl;
int m1,n1;
cin>>m1>>n1;
cout<<"请输入稀疏矩阵1非零元素所在的行 列 值 输入完后以 0 0 0结束"<<endl;
InputMatrix(a,m1,n1);
InitMatrix(b);
cout<<"请输入稀疏矩阵2的行数和阶数"<<endl;
int m2,n2;
cin>>m2>>n2;
cout<<"请输入稀疏矩阵2中非零元素的行 列 值 输入完后以 0 0 0结束 "<<endl;
InputMatrix(b,m2,n2);
output(Add(a,b));
};break;
case '':
{
SMatrix a,b;
InitMatrix(a);
cout<<"请输入稀疏矩阵1的行数和列数"<<endl;
int m1,n1;
cin>>m1>>n1;
cout<<"请输入稀疏矩阵1非零元素所在的行 列 值 输入完后以 0 0 0结束"<<endl;
InputMatrix(a,m1,n1);
InitMatrix(b);
cout<<"请输入稀疏矩阵2的行数和阶数"<<endl;
int m2,n2;
cin>>m2>>n2;
cout<<"请输入稀疏矩阵2中非零元素的行 列 值 输入完后以 0 0 0结束"<<endl;
InputMatrix(b,m2,n2);
output(chengfa(a,b));
};break;
}
return ;
}

最后说一句,以上都是扯淡,都是扯淡,能挣着钱才是王道呀!!!!!!

孩子我还是太幼稚

7、c++版,在大学学的编程基础知识的更多相关文章

  1. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  2. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  3. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  4. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  5. TCP与UDP比较 以及并发编程基础知识

    一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...

  6. Jquery真的不难~第一回 编程基础知识

    Jquery真的不难~第一回 编程基础知识   回到目录 前言 说Jquery之前,先来学习一下Javascript(以后简称为JS)语言中的基础知识问题,其时对于每种编程语言来说基础知识都是大同小异 ...

  7. 1.unix网络编程基础知识

    接触网络编程一年多了,最近在系统的学习vnp两本书,对基础知识做一些总结,希望理解的更透彻清晰,希望能有更多的沉淀. 1.套接口地址 针对IPv4和IPv6地址族,分别定义了两种类型的套接口地址:so ...

  8. 你得学会并且学得会的Socket编程基础知识

    这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblog ...

  9. PHP CLI编程基础知识积累(进程、子进程、线程)

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

随机推荐

  1. 使用ajax前必须了解的知识

    ajax的全称: asynchronous javascript and xml (异步的javascript和xml) ajax不是某种编程语言 是一种在无需重新加载整个页面的情况下能够更新部分网页 ...

  2. CSS-给Font Awesome拓展Base64编码的图标

    和 fa 一样设置到::before中就行了,不过 fa 是直接设置内容,这里用的背景图 .fa-science-garden::before { content: ""; dis ...

  3. xshell设置选中复制,右击粘贴功能

    . 设置选中复制: 工具--->选项--->键盘和鼠标--->(然后根据下图设置保存即可) 2. 设置ctrl + v 粘贴功能: 工具--->选项--->键盘和鼠标-- ...

  4. APP运营怎么利用留存率等数据分析用户减少的原因?

    APP运营怎么利用留存率等数据分析用户减少的原因? 数据分析最核心的方法是作比较,因为绝对的数值在大多数场合下是没有意义的,通过在不同维度之间做数据的比较分析,能帮助开发者找到数据变化的原因.举一个典 ...

  5. SQL 交叉连接与内连接

    交叉连接 ,没有任何限制方式的连接. 叫做交叉连接. 碰到一种SQL 的写法. select * from  t1,t2 .     这其实是交叉连接 .   t1  是三条 ,  t2 是两条.  ...

  6. Yahoo! 35条网站性能优化建议

    Yahoo! 35条网站性能优化建议 Yahoo!的 Exceptional Performance团队为改善 Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客 ...

  7. upc组队赛15 Lattice's basics in digital electronics【模拟】

    Lattice's basics in digital electronics 题目链接 题目描述 LATTICE is learning Digital Electronic Technology. ...

  8. golang的数据类型之基本数据类型的默认值和转换

    默认值: 整型的默认值:0 浮点型的默认值:0字符串的默认值:""   //空布尔类型的默认值:false package mainimport "fmt" f ...

  9. [fw]PAGE_SIZE & PAGE_SHIFT & _AC()

    PAGE_SIZE & PAGE_SHIFT & _AC() 在大多系统下,PAGE_SIZE被定义为 4k 大小,即 4096 字节. 在 x86 系统里,PAGE_SIZE 和 P ...

  10. centons6升级gcc和glibc版本

    一.先升级gcc 这里配置yum源来升级 centos6系列更换阿里yum源 1.首先备份原来的cent os官方yum源 cp /etc/yum.repos.d/CentOS-Base.repo / ...