分別用陣列和鍊錶實現堆

2021-06-21 10:59:44 字數 1613 閱讀 5058

為了更好的理解棧的原理,本文分別用陣列和鍊錶實現了棧,

關於堆和棧的區別可參考文章:

1 陣列實現棧:

/*

@ brife:陣列實現棧類

*/#include #ifndef arraystack_h

#define arraystack_h

const uint defualf_stack_size = 3;

template class carraystack

~carraystack(void)

bool isempty()

void push(const t& data)

t* tmp1 = stacknode;

stacknode = tmp;

delete tmp1;

tmp1 = null;

}stacknode[++top]=data; }

void pop() }

t& gettop() }

int getcount() const

int getcapacity() const

private:

t *stacknode;

int top;

int count;

int capacity;

};#endif

2  鍊錶實現的棧

#include #ifndef  liststack_h

#define liststack_h

template struct linknode;

template class cliststack

~cliststack(void) }

bool isempty()

void push(const t& data)

temp->data = data;

temp->next = null;

if(null == head)

else

length++;

return;

} void pop()

linknode* node = head;

if(node == top)

else

top = node;

node = node->next;

} delete node;

node = null;

length--;

} t& gettop()

return node->data;

} } int getcount() const

private:

linknode*head;

linknode*top;

int length;

};#endif

3 測試**

//#include "stdafx.h"

#include "arraystack.h"

#include "liststack.h"

#include using namespace std;

int _tmain(int argc, _tchar* argv);

佇列類(分別用列表和鍊錶實現)

usr bin python3 class queueunderflow valueerror pass class listqueue 列表實現迴圈佇列類 def init self,len 8 self.len len self.elems 0 len 預設每個元素都是0 self.head 0...

約瑟夫環的陣列和鍊錶分別實現

約瑟夫環問題的一種描述是 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新從1報數,如此下去,直到所有...

堆 鍊錶實現

小頂堆大頂堆的概念大家應該都很熟悉了,如果不了解,可以搜尋一下,網上很多介紹,而且很多原始碼實現,都很簡單。不過從網上看了一些堆的實現,都是用陣列的。但是陣列有乙個缺陷,需要擴充套件時,就要複製原來的記憶體,申請新的空間。所以我在想能不能用鍊錶,發現還真可以,就湊湊寫了個 最後 是寫完了,發現其實鍊...