二項佇列的建立及其基本操作

2021-08-20 11:56:20 字數 3189 閱讀 3517

#include

#include//二項佇列支援合併,插入,刪除最小值等操作,且每次操作最壞花費log n

//二項佇列不是乙個堆序,而是一群堆序的集合

#define infinity 10000

#define maxtrees  14            //capacity size  2^14 - 1

#define capacity  16383

typedef int elementtype;

typedef struct binnode *position;                   //二項樹節點

typedef struct binnode *bintree;

typedef struct collection *binqueue;                // 二項佇列

bintree combinetrees(bintree t1,bintree t2);        //合併二項樹

binqueue merge(binqueue h1,binqueue h2);            //合併二項佇列,二項佇列即森林,二項樹的集合

elementtype deletemin(binqueue h);                  //刪除二項佇列中最小值

int isempty(binqueue h);                            //判空

int isfull( binqueue h );                           //判滿

binqueue initialize(void);                          //初始化二項佇列

static void destroytree( bintree t );               //銷毀二項樹

void destroy( binqueue h );                         //銷毀二項佇列

binqueue makeempty( binqueue h );                   //清空二項佇列

elementtype findmin( binqueue h );                  //找到二項佇列中最小值

binqueue insert( elementtype item, binqueue h );    //插入

int main(void)

struct binnode                              //二項樹節點

;struct collection                           //二項佇列

;bintree combinetrees(bintree t1,bintree t2)  //合併t1,t2兩個二項樹

binqueue merge(binqueue h1,binqueue h2)                 //合併兩個二項佇列

}//  free(h2);

return h1;

}elementtype deletemin(binqueue h)                   //刪除最小值

minitem = infinity;

for( i = 0; i < maxtrees;i++)                   //遍歷整個二項佇列,找到具有最小值的二項樹

}deletedtree = h->thetrees[mintree];         //deletedtree and oldroot 設為具有最小值的二項佇列

oldroot = deletedtree;

deletedtree = deletedtree->leftchild;           //保留最小二項樹中最小節點的左孩子,右兄弟為null

free(oldroot);                                  //刪除最小二項樹中最小值的節點

deletedqueue = initialize();                        //初始化乙個二項佇列deletedqueue

//初始化該二項佇列的大小為,因為刪除了頭節點,所以-1

deletedqueue->currentsize = (1 <<  mintree) - 1;

for( j = mintree - 1; j >= 0 ; j-- )             //從該二項樹前乙個開始

h->thetrees[mintree] = null;

h->currentsize -= deletedqueue->currentsize + 1; //減去deletedqueue->cur 是因為下一步合併是要加上

merge(h,deletedqueue);                          //合併

return minitem;                                 //返回刪除的最小值

}int isempty( binqueue h )                               //判空

int isfull( binqueue h )                                //判滿

binqueue initialize(void)                                   //初始化

static void destroytree( bintree t )                    //刪除二項樹

}void destroy( binqueue h )                              //刪除二項佇列,但不刪除頭節點 h

binqueue makeempty( binqueue h )                        //清空二項佇列

elementtype findmin( binqueue h )                              //返回最小值

minitem = infinity;                                         //初始化最小值

for( i = 0; i < maxtrees; i++ )

return minitem;

}binqueue insert( elementtype item, binqueue h )                 //插入乙個數

佇列的建立及其操作

1.隊尾進入,隊頭出的鍊錶 2.結構包含 節點結構 節點資料,next指標。佇列結構 節點隊頭指標,節點隊尾指標。實現 include include using namespace std typedef int elemtype typedef int status define maxsize...

迴圈佇列及其基本操作的實現

public inte ce iqueue public class circlesqqueue implements iqueue 將乙個已經存在的佇列置成空 public void clear 測試佇列是否為空 public boolean isempty 求佇列中的資料元素個數並由函式返回其值...

佇列的建立以及基本操作

佇列 fifo 是只允許在一段插入,另一端刪除的線性表,遵循先進先出原則,隊頭刪除,隊尾插入。順序佇列 使用用陣列儲存 初始條件front rear 0 滿佇列 rear m 容量m 空佇列 front rear 結構 typedef struct queue 操作 初始化佇列 queue init...