heap.h
#pragma once
typedef
int datatype;
typedef
int (*compare)(datatype pleft,datatype pright);
//表示的意思的就是接收兩個指標型別的引數,返回整型的函式指標。
typedef
struct heap
heap;
void initheap(heap* hp,compare com);//初始化堆
void createheap(heap* hp,datatype* array, int size);//建立堆
void insertheap(heap* hp,datatype data);//向堆中插入資料
void deleteheap(heap* hp);//堆的刪除
int sizeheap(heap* hp);//堆的大小
int emptyheap(heap* hp);//清空堆
void destroyheap(heap* hp);//銷毀堆
datatype topheap(heap* hp);//取堆頂元素
int greater(datatype pleft,datatype pright);//大
int less(datatype pleft,datatype pright);//
heap.c
#include"heap.h"
#include
#include
#include
void swap(datatype* pleft,datatype* pright)
void _adjustdown(heap* hp,int parent)//向下調整
}void _adjustup(heap* hp,int child)//向上調整
else
return;
}}int _checkcapacity(heap* hp)
//拷貝元素
for(;i_size;++i)
ptemp[i] = hp->_array[i];
//釋放舊空間
free(hp->_array);
hp->_array = ptemp;
hp->_capacity = newcapacity;
}return1;}
void initheap(heap* hp,compare com)//初始化堆
hp->_capacity = 3;
hp->_size = 0;
hp->_com = com;
}void createheap(heap* hp,datatype* array, int size,compare com)
hp->_capacity = size;
//2、往堆裡放置元素
for(i = 0;i < size; ++i)
hp->_array[i] = array[i];
hp->_size = size;
hp->_com = com;
//3、調整
for(; root >= 0;--root)
_adjustdown(hp,root);
}void insertheap(heap* hp,datatype data)//向堆中插入資料
void deleteheap(heap* hp)//堆的刪除
int sizeheap(heap* hp)//堆的大小
int emptyheap(heap* hp)//清空堆
void destroyheap(heap* hp)//銷毀堆
}datatype topheap(heap* hp)//取堆頂元素
int greater(datatype left,datatype right)//大
int less(datatype left,datatype right)//小
void testheap()
; heap hp;
createheap(&hp,arr,sizeof(arr)/sizeof(arr[0]),less);//這個要小堆,如果要大堆就傳greater
insertheap(&hp,5);
printf("size = %d\n",sizeheap(&hp));
printf("top = %d\n",topheap(&hp));
deleteheap(&hp);
printf("size = %d\n",sizeheap(&hp));
printf("top = %d\n",topheap(&hp));
}//堆排序(公升序)要的是大堆
void heapadjust(int* array,int size,int parent)
if(array[parent] < array[child]) //如果雙親比最大的孩子還小 不滿足情況 大的元素向上走
else
//否則滿足大堆
return;
}//堆排序(公升序)
void heapsort(int *array,int size)
}void testheapsort()
; heapsort(arr,sizeof(arr)/sizeof(arr[0]));
}
priorityqueue.h
//優先順序佇列。
#pragma once
#include
"heap.h"
typedef struct priorityqueue
priorityqueue;
void priorityqueueinit(priorityqueue* q,compare com);//初始化優先順序佇列
void priorityqueuepush(priorityqueue* q,datatype data);//向優先順序佇列插入元素
void priorityqueuepop(priorityqueue* q);
datatype priorityqueuetop(priorityqueue* q);
int priorityqueuesize(priorityqueue* q);
int priorityqueueempty(priorityqueue* q);
void priorityqueueinit(priorityqueue* q,compare com)//初始化優先順序佇列
void priorityqueuepush(priorityqueue* q,datatype data)//向優先順序佇列插入元素
void priorityqueuepop(priorityqueue* q)
datatype priorityqueuetop(priorityqueue* q)
int priorityqueuesize(priorityqueue* q)
int priorityqueueempty(priorityqueue* q)
teat.c
#include"heap.h"
int main()
資料結構 堆的基本操作和堆排序
heap.h pragma once includetypedef int heaptype define heapmaxsize 1000 typedef int compare heaptype a,heaptype b typedef struct heapheap 初始化 void heap...
python 列表基本操作和方法及其應用
1.列表的基本操作 針對列表的基本操作除了通用序列操作,還有賦值 插入 刪除 排序等 列表是可變物件型別,因此這些操作都是對原列表的修改,並不生成新的列表 1 賦值 如果是單個索引,就是單個列表元素的賦值。如果同時給多個列表元素賦值,就可以利用強大的分片功能來賦值。list是乙個常用的型別轉換函式。...
堆的基本操作和堆排序 C語言版
typedef int compare datatype left,datatype right 函式指標 typedef struct heap heap 交換函式 void swap datatype left,datatype right 向下調整 void adjustdown heap h...