中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL數據庫實現原理是什么

發布時間:2021-11-04 17:01:50 來源:億速云 閱讀:292 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“PostgreSQL數據庫實現原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PostgreSQL數據庫實現原理是什么”吧!

PostgreSQL的FSM文件,其數據結構基礎是最大堆二叉樹,構建/刪除/插入的相關代碼詳見代碼注釋.

#include "heap.h"
static int heap[MAX_ELEMENTS];
static int counter = 0;
//交換數據
static void swap(int *i,int *j)
{ 
  int tmp = *j;
  *j = *i;
  *i = tmp;
}
//打印堆信息
//n : 元素個數
void print_max_heap()
{
  for(int i = 1;i <= counter;i++)
  {
     printf("item[%d] is %d\n",i,heap[i]);
  }
}
//初始化堆數組
void init_heap(int *array,int n)
{
  for(int i=0;i < n;i++)
  {
    heap[i] = array[i];
  }
  counter = n;
}
//插入到最大堆
//item : 插入的值
//*n : 堆元素個數
void insert_max_heap(int item)
{
    if(HEAP_FULL(counter)){
      return;
    }
    //整個算法思想是首先把插入的值放在堆中的最后一個位置,然后為其找到合適的位置(遞歸向上)
    int i = ++counter;
    //i ≠ 1是因為數組的第一個元素并沒有保存堆結點
    for(;(i != 1) && (item > heap[i/2]);i = i / 2){
      //如果插入的值比其父節點要大,把父節點的值交互到當前節點
      heap[i] = heap[i/2];//這里其實和遞歸操作類似,就是去找父結點
    }
    //父節點的值比當前值要大或者已到達根節點,設置當前位置的值為要插入的值
    heap[i] = item;
}
//刪除最大堆中的元素
//*n : 堆元素個數
void delete_max_heap()
{
  //刪除最大堆,總是刪除最大堆的根節點
  if(HEAP_EMPTY(counter))
  {
     return;
  }
  //算法思想 : 把最后一個元素作為根節點,然后尋找該節點在樹中合適的位置
  int lastone = heap[--counter];
  //父節點,初始化為1
  int parent = 1;
  for (int son=parent*2;son <= counter;son=son*2)
  {
    //刪除父節點后,比較左右子節點的大小
    if(son < counter && heap[son] < heap[son+1])
    {
      //如果右子節點大于左子節點,切換到右子節點
      son++;
    }
    if (lastone > heap[son])
    {
      break;//已經比兒子要大,退出
    }
    //把子節點移到父節點
    //parent的位置就是lastone移動到的位置
    heap[parent]=heap[son];
    //遞歸,到下一層子樹
    parent = son;
  }
  //parent的位置就是最后一個元素所在的位置
  heap[parent]=lastone;//lastone的實際位置已找到,賦值
}
//構建最大堆
//n : 元素個數
//heap是初始化但未構建的數組
void build_max_heap()
{
  for(int i = counter;i > 1;i--)
  {
    //從最后一個元素(最下層)開始遍歷數組
    if(heap[i] > heap[i/2])
    {
      //子節點比父節點要大,交換父子節點
      swap(&(heap[i/2]),&(heap[i]));
      for(int j=i*2;j < counter;j=j*2)
      {
        //遞歸處理子節點
        if (j > counter)
        {
          break;
        }
        if(j < counter && heap[j+1] > heap[j])
        {
          //切換至右子節點
          j++;
        }
        if (heap[j] > heap[j/2])
        {
          //如果子節點大于父節點,交換
          swap(&(heap[j/2]),&(heap[j]));
        }
      }//end for#2
    }//end if
  }//end for#1
}
void build_max_heap_new()
{
  for(int i = counter/2;i > 1;i--)
  {
    //從子節點上一層開始處理
    //父節點為i
    int parent=i;
    //該節點的值
    int temp=heap[parent];
    for(int child=parent*2;child <=counter;child=child*2)
    {
      //
      if(child < counter && heap[child] < heap[child+1])
      {
        //切換到右子節點
        child++;
      }
      if(temp > heap[child])
        //父節點比子節點大,退出該父節點構成的樹循環
        break;
      else
      {
        //把子節點的值放到父節點中
        heap[parent] = heap[child];
      }
      //進入到子節點,遞歸處理
      parent = child;
    }
    //已找到該父節點合適的位置,賦值
    heap[parent]=temp;
  }//end for#1
}

感謝各位的閱讀,以上就是“PostgreSQL數據庫實現原理是什么”的內容了,經過本文的學習后,相信大家對PostgreSQL數據庫實現原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三亚市| 甘南县| 海晏县| 曲阳县| 上饶市| 峨山| 江永县| 西昌市| 梁平县| 英超| 紫阳县| 同江市| 隆昌县| 阿克| 沁阳市| 景泰县| 于都县| 施甸县| 定西市| 河北省| 吉林省| 武强县| 特克斯县| 韶山市| 赫章县| 嘉黎县| 绥棱县| 葫芦岛市| 荆州市| 灵山县| 建宁县| 连山| 宝兴县| 德化县| 辽阳县| 康平县| 大邑县| 安新县| 宜黄县| 天全县| 静海县|