我的数据结构、算法笔记

这篇博客主要记录了数据结构中的克鲁斯卡尔算法和普利姆算法,分别适用于稀疏图和稠密图的最短路径求解。此外,还涉及到二叉树和堆的概念,以及栈的数据结构。
摘要由CSDN通过智能技术生成

 


//克鲁斯卡尔算法(适合于稀疏图)

void Kruskal(edgeset GE,edgeset C, int n)
{
 int i,j,k,d;
 int m1,m2;
 adjmatrix s;
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  if(i==j)
   s[i][j]=1;
  else
   s[i][j]=0;
 }
 k=1;
 d=0;
 while(k<n)
 {
  for(i=0;i<n;i++)
  {
   if(s[i][GE[d].fromvex]==1)
    m1=i;
   if(s[i][GE[d].endvex]==1)
    m2=i;
  }
  if(m1!=m2)
  {
   C[k-1]=GE[d];
   k++;
   for(j=0;j<n;j++)
   {
    s[m1][j]=s[m1][j] || s[m2][j];
    s[m2][j]=0;
   }
  }
  d++;
 }
}


 

//普利姆算法(适合于稠密图)

void Prim(adjmatrix GA,edgeset CT,int a,int n)
{
 int i,j,k,min,t,m,w;
 struct edgeElem x;
 for(i=0;i<n;i++)
 {
  if(i<a)
  {
   CT[i].fromvex=a;
   CT[i].endvex=i;
   CT[i].weight=GA[a][i];
  }
  else if(i>a)
  {
   CT[i-1].fromvex=a;
   CT[i-1].endvex=i;
   CT[i-1].weight=GA[a][i];
  }
 }
 for(k=1;k<n;k++)
 {
  min=MaxValue;
  m=k-1;
  for(j=k-1;j<n-1;j++)
   if(CT[j].weight<min)
   {
    min=CT[j].weight;
    m=j;
   }
   x=CT[k-1];
   CT[k-1]=CT[m];
   CT[m]=x;
   j=CT[k-1].endvex;
   for(i=k;i<n-1;i++)
   {
    t=CT[i].endvex;
    w=GA[j][t];
    if(w<CT[i].weight)
    {
     CT[i].weight=w;
     CT[i].fromvex=j;
    }
   }
 }
}


 

/*冒泡_下沉*/
int i,j;
for(i=0;i<n;n--)
    for(j=i;j<n-1;j++)
       {
  if(a[j]<a[j+1]) 交换; 
  }


/*冒泡_起泡*/
  for(i=0;i<n;i++)
     for(j=n-1;j>=0;--)
         if(a[j]>a[j-1] 交换;


 

/*选择排序*/
void select_sort(int *a,int n)
{//从大到小
 int i,j,k,temp;
 for(i=0;i<n;i++)
 {
  k=i;
  for(j=i+1;j<n;j++)
  {
   if(a[k]<a[j])
    k=j;
  }
  if(k!=i)
  {
   temp=a[i];
   a[i]=a[k];
   a[k]=temp;
  }
 }
}


 

/*快速排序*/
void QuickSort(int a[], int s, int t)
{
 int i=s,j=t+1;
 int temp=a[s];
 do
 {
  do
  i++;
  while(a[i]<temp);
  do 
  j--;
  while(a[j]>temp);
  if(i<j)
  {
   int t;
   t=a[i];
   a[i]=a[j];
   a[j]=t;
  }
 }while(i<j);
 a[s]=a[j];
 a[j]=temp;
 if(s<j-1)
  QuickSort(a,s,j-1);
 if(t>j+1)
  QuickSort(a,j+1,t);
}


 


/*  拓扑排序
*   (activity on vertex network) AOV网
*/
void Toposort(adjlist GL, int n)
{
 int i,j,k,top,m=0;
 struct edgenode*p;
 int* d=(int*)malloc(n*sizeof(int));
 for(i=0;i<n;i++)
  d[i]=0;
 for(i=0;i<n;i++)
 {
  p=GL[i];
  while(p!=NULL)
  {
   j=p->adjvex;
   d[j]++;
   p=p->next;
  }
 }
 top=-1;
 fo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值