skew堆(相当于leftist的简化版)

本文介绍了一种名为偏斜树的数据结构,并提供了其核心操作的C语言实现,包括初始化、节点分配与释放、合并及调整等关键算法。通过随机化插入与删除演示了偏斜树如何保持良好的性能。
 

#include  <stdio.h>
#include  <stdlib.h>
#include  <time.h>

#define  NIL   99999
#define   RAND   1000


typedef  struct   _skew
{
  int  key;
 // int  dis;
  struct _skew  *left;
  struct  _skew  *right;
}skew;

typedef  struct  _wrapskew
{
  struct  _wrapskew  *next;
  skew  real;
}wrapskew;


wrapskew  global[RAND];
wrapskew  *head;
wrapskew  *tail;

void  skew_init( )
{
  int  i;
  for(i=0;i<RAND-1;i++)
    {
      global[i].next=&global[i+1];
    }
  head=&global[0];
  tail=&global[RAND-1];
}


skew  *mycalloc ( )
{
  skew  *temp=&head->real;
  temp->left=temp->right=NULL;
  head=head->next;
  return  temp;
}

void  myfree (skew  *node)
{
  wrapskew  *temp = (wrapskew *)( (int)node- sizeof (wrapskew *) );
  temp->next=0;
  node->left=node->right=node->key=0;
  tail->next=temp;
  tail=temp;
  return ;
}

skew  *newconstruct (  int  key)
{
  skew  *obj=(skew *)mycalloc ( );
  obj->key=key;
  return  obj;
}

/*
skew  *nilstruct ( )
{
  static   skew  *obj=NULL;
  if  (!obj )
    {
      obj=newconstruct ( NIL);
      obj->key=NIL;
      obj->dis=0;
    }
  else
    {
    }
  return  obj;
}
*/


skew  *skew_adjust ( skew  *left)
{

  skew  *tmp;
  /*
  if(!left->left)
    {
    }
  else
    {
      if(left->left->dis>= left->right->dis)
 {
   left->dis=left->right->dis+1;
   return  left;
 }
    }
  */

  tmp=left->left;
  left->left=left->right;
  left->right=tmp;

  /*
  if(!left->right)
    {
      left->dis=0;
    }
  else
    {
      left->dis=left->right->dis+1;
    }
  */

  return  left;
}

skew * skew_merge ( skew *left ,skew  *right)
{
  if(!left)
    {
      return  right;
    }
  if (!right)
    {
      return  left;
    }
  if (left->key < right->key)
    {
      left->right=skew_merge ( left->right ,right );
      return   skew_adjust (left);

    }
  else
    {
      right->right=skew_merge  ( left ,right->right);
      return  skew_adjust ( right );
    }
}

skew  *skew_pop ( skew  **head)
{
  skew  *result=*head;
  *head=skew_merge  (  result->left ,result->right );
  return  result;

int main()
{
  int  i;
  int  skew_count=0;
  skew  *head=NULL;
  skew  *newobj=NULL;

  skew_init( );
  while(1)
    {

      printf("\n\ninto  insert  mode\n\n");
      while(skew_count <  RAND *3/4)
 {
   i=rand()%RAND;
   newobj=newconstruct ( i );
   head=skew_merge ( head, newobj );
   skew_count++;

 }
      while(skew_count >  RAND *1/3)
 {
   newobj=skew_pop ( &head);
   printf("%d  ", newobj->key); 
   myfree (newobj);
   skew_count--;
 }
    }

}

【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度()—MPS动态调度(Matlab代码实现)内容概要:本文档围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”主题,重点介绍MPS(Mobile Power Sources)动态调度的Matlab代码实现,是SCI一区论文复现的技术资料。内容涵盖在灾害或故障等极端场景下,如何通过优化算法对应急移动电源进行科学调度,以提升配电网在突发事件中的恢复能力与供电可靠性。文档强调采用先进的智能优化算法进行建模求解,并结合IEEE标准测试系统(如IEEE33节点)进行仿真验证,具有较强的学术前沿性和工程应用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事电力系统优化、配电网韧性、应急电源调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现高水平期刊(SCI一区、IEEE顶刊)中关于配电网韧性与移动电源调度的研究成果;②支撑科研项目中的模型构建与算法开发,提升配电网在故障后的快速恢复能力;③为电力系统应急调度策略提供仿真工具与技术参考。; 阅读建议:建议结合前篇“MPS预配置”内容系统学习,重点关注动态调度模型的数学建模、目标函数设计与Matlab代码实现细节,建议配合YALMIP等优化工具包进行仿真实验,并参考文中提供的网盘资源获取完整代码与数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值