為了更好的理解棧的原理,本文分別用陣列和鍊錶實現了棧,
關於堆和棧的區別可參考文章:
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報數,如此下去,直到所有...
堆 鍊錶實現
小頂堆大頂堆的概念大家應該都很熟悉了,如果不了解,可以搜尋一下,網上很多介紹,而且很多原始碼實現,都很簡單。不過從網上看了一些堆的實現,都是用陣列的。但是陣列有乙個缺陷,需要擴充套件時,就要複製原來的記憶體,申請新的空間。所以我在想能不能用鍊錶,發現還真可以,就湊湊寫了個 最後 是寫完了,發現其實鍊...