《算法与数据结构---C语言描述》优先队列

所谓的优先队列,其实是一个二叉树,只是这个树比较特别,小数据的结点一定在大数据的结点之上,又称“小根堆”。

  搞了几天,终于把优先队列搞定了,当然,也是这几天老是分神,QQ还是在白天设置成免打扰模式吧。

  

  以下是代码

 

  
View Code
 1 #ifndef PriorityLEAP_H
2 #define PriorityLEAP_H
3
4 template<class T>
5 class PriorityLeap
6 {
7 public:
8 PriorityLeap(T d){
9 llink = NULL;
10 rlink = NULL;
11 plink = NULL;
12 data = d;
13 }
14
15 void add_heap(T d)
16 {
17 //1.移到树叶,
18 //2.向上移,直到要结点或者父结点比插入的节点大
19 PriorityLeap* leaf = this;
20 PriorityLeap* add = new PriorityLeap(data);
21 add->data = d;
22 while (leaf->llink != NULL )
23 {
24 leaf = leaf->llink;
25 }
26 leaf->llink = add;
27 add->plink = leaf;
28 int begin = false;
29 while ( leaf != NULL && d < leaf->data )
30 {
31 leaf->llink->data = leaf->data;
32
33 if(leaf->plink ==NULL){
34 leaf->data = d;
35 begin = true;
36 break;
37 }
38 leaf = leaf->plink;
39 }
40 if(!begin)
41 leaf->llink->data = d;
42 }
43 T removeMini_heap()
44 {
45 T ret = data;
46
47 PriorityLeap* temp = this;
48 PriorityLeap* t = NULL;
49
50 while (temp && (temp->llink != NULL || temp->rlink != NULL) )
51 {
52 t = temp;
53 if ( temp->llink == NULL ){
54 temp = temp->rlink;
55 }
56 else if ( temp->rlink == NULL ){
57 temp = temp->llink;
58 }
59 else if ( temp->llink->data > temp->rlink->data){
60 temp = temp->llink;
61 }
62 else{
63 temp = temp->rlink;
64 }
65
66 t->data = temp->data;
67
68 }
69
70 return ret;
71 }
72 bool isEmpty()
73 {
74 if(llink==NULL && rlink == NULL){
75 return true;
76 }
77 return false;
78 }
79 public:
80 T data;
81 PriorityLeap* llink;
82 PriorityLeap* rlink;
83 PriorityLeap* plink;
84 };
85 #endif
View Code
 1 int _tmain(int argc, _TCHAR* argv[])
2 {
3 char s_a = 'a';
4 char s_b = 'b';
5 char s_c = 'c';
6 char s_d = 'd';
7 char s_e = 'e';
8 char s_f = 'f';
9
10 PriorityLeap<char> leap(s_f);
11 leap.add_heap(s_d);
12 leap.add_heap(s_e);
13 leap.add_heap(s_c);
14
15 for (int i = 0; i < 4; i++)
16 {
17 printf("priorityleap %c\n",leap.removeMini_heap());
18 }
19
20 system("pause");
21 return 0;
22 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法与数据结构 C语言描述》第3版是张乃孝所著的一本关于算法和数据结构的教材,主要使用C语言进行描述和实现。该书内容详细全面,适合初学者和有一定编程基础的读者学习和参考。 该书主要分为两个部分,第一部分介绍了算法和数据结构的基本概念和原理,包括线性表、栈、队列、串、数组、广义表、树、图等。通过详细的解释和示例代码,读者可以理解数据结构的基本原理和操作,同时学会使用C语言进行实现。 第二部分是算法设计和分析部分,讲述了常见的算法设计方法和策略,如递归、分治法、贪心法、动态规划等。同时,还介绍了常见的排序算法、查找算法、图算法等,包括冒泡排序、选择排序、插入排序、快速排序、二分查找、最短路径算法等。每个算法都有详细的解释和示例代码,方便读者理解和实践。 此外,该书还介绍了如何评价和分析算法效率,包括时间复杂度、空间复杂度和平均情况、最坏情况、最好情况的分析方法。这对于读者理解算法的效率和性能有很大帮助,并且能够在实际编程中选择更优的算法。 总之,《算法与数据结构 C语言描述》第3版是一本综合性的教材,适合初学者和有一定编程基础的读者学习和参考。通过学习该书,读者不仅可以理解算法和数据结构的基本原理,还可以学会如何用C语言实现这些算法和数据结构,并且能够评价和分析算法的效率和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值