棧和佇列的實現
#include <iostream> #include <assert.h> using namespace std; //Stack implementation template<class T> class Stack { public: Stack() :a(NULL) ,_top(0) ,capacity(0) {} ~Stack() { if(a!=NULL) { delete[] a; } } Stack(const Stack<T>& s) :a(s.a) ,capacity(s._top) ,_top(s._top) { s.a=NULL; } Stack<T>& operator=(const Stack<T>& s) { if(this!=&s) { swap(a,s.a); capacity=s.capacity; _top=s._top; } return *this; } void Push(const T& d) { _CheckCapacity(); a[_top++] = d; } void Pop() { if(_top!=0) { _top--; } } T& top() { return a[_top-1]; } bool Empty() { if(_top==0) return true; } size_t Size() { return _top; } protected: void _CheckCapacity() { int i; if(_top==capacity) { capacity=2*capacity+3; T* tmp=new T[capacity]; for(i=0;i<(_top);i++) { tmp[i]=a[i]; } delete[] a; a=tmp; } } private: T* a; size_t _top; size_t capacity; }; //Queue implementation template<class T> struct Node { Node(const T&d) :_data(d) ,next(NULL) { } T _data; Node<T> *next; }; template<class T> class Queue { public: Queue() :_head(NULL) ,_tail(NULL) ,m(0) { } ~Queue() { if(_head!=NULL) { Node<T> *cur=_head; Node<T> *del=NULL; while(cur) { del=cur; cur=cur->next; delete del; del=NULL; } } } void Push(const T& x) { Node<T>* NewNode=new Node<T>(x); if(_head==NULL) { _head=_tail=NewNode; } else { NewNode->next=_head; _head=NewNode; } m++; } void Pop() { Node<T> *del=NULL; if(_head==NULL) { return; } else if(_head==_tail) { delete _head; _head=NULL; } else { del=_head; _head=_head->next; delete del; del=NULL; } m--; } T& Front() { assert(_head); return _head->_data; } T& Back() { assert(_head); return _tail->_data; } bool Empty() { if(_head==NULL) return true; } size_t Size() { assert(_head); return m; } protected: Node<T>* _head; Node<T>* _tail; size_t m; };
相關推薦
python 用棧和佇列實現二叉樹的深度優先遍歷(三種)和廣度優先遍歷
#coding=utf-8 #自定義佇列 class pyqueue(): def __init__(self, size): self.queue = [] self.size = size self.end =
基於棧和佇列實現二叉樹的遍歷
一般我們遍歷二叉樹的時候用的是遞迴,用遞迴實現比較簡單,程式碼如下: C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13
用棧和佇列實現迴文判斷
#include<stdio.h> #include<stdlib.h> struct node; typedef struct node *pnode; struct node { char info; pnode link; };
js 實現棧和佇列
js實現棧或者佇列有兩種方式: 1.陣列:陣列本身提供棧方法(push,pop),佇列方法(push,shift)。 程式碼實現(棧): /*=======棧結構=======*/ var stack=function(){ this.data=[] this.push=push
向量、連結串列、棧和佇列的基本實現
目錄 一、一點感想 二、程式碼 1、Vector 2、 List 3、Stack 4、Queue 三、不足之處 一、一點感想 自學資料結構和演算法到現在時間也不短了,一直猶豫著要不要寫一寫向量等幾個最最基本的資料結構,因為總覺得是最基本的,
C語言實現棧和佇列(棧和佇列的基本操作)
棧: 棧:棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。 特點:先進後出 stack.h #pragma once #include <stdio.h> #include <
棧和佇列的基本操作的實現
1. 實驗目的 熟練掌握棧和佇列的抽象資料型別,能在相應的應用問題中正確選用它們,熟練掌握棧和佇列的實現方法(順序和鏈式),兩種儲存結構和基本操作的實現演算法,注意空和滿的判斷條件及它們的描述方法,掌握迴圈佇列與其它順序結構實現上的不同及解決辦法,熟悉各種佇列的基本操作在迴圈佇列上的實現
python列表練習-用python實現棧和佇列
1.棧的工作原理:先進後出 入棧 出棧 棧頂元素 棧的長度 棧是否為空 stack = [] info = """ 棧操作 1.入棧 2.出棧 3.棧頂元素 4.棧的長度 5.棧是否為空 """ while True:
棧和佇列的結構實現
棧 棧(stack),有些地方稱為堆疊,是一種容器,可存入資料元素、訪問元素、刪除元素,它的特點在於只能允許在容器的一端(稱為棧頂端指標,英語:top)進行加入資料(英語:push)和輸出資料(英語:pop)的運算。沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存入的那個元素,確定
資料結構---棧和佇列(結構體實現)
棧(LIFO) 棧(stack)是一種只能在一端進行插入或刪除操作的線性表。 棧頂(top):允許進行插入、刪除操作的一端 棧底(bottom):另一端稱為棧底 進棧或入棧(push):插入操作 出棧或退棧(pop):棧的刪除操作 n個不同元素通過一個棧產生的出棧
棧和佇列的基本操作實現及其應用
實驗2:棧和佇列的基本操作實現及其應用 一、實驗目的 1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、 學會使用棧和佇列解決實際問題。 二、實驗內容 1
Java實現棧和佇列
棧:LIFO(後進先出) 佇列:FIFO(先進先出) 棧的順序儲存結構實現: /** * 基於陣列實現的順序棧 * @param <E> */ public class Stack<E> { private Object[]
C++實現棧和佇列(Linux環境)
Stack.h #pragma once #include<iostream> using namespace std; #include<assert.h> //靜態棧 te
棧實現佇列和佇列實現棧
1、棧實現佇列 棧結構:先進後出(FILO); 佇列結構:先進先出(FIFO); 所以想要用棧實現佇列的效果,自然而然地就想到兩個棧實現一個佇列; 程式碼如下: 兩個棧,一個入隊,一個出隊 public class QueueOfStack {
【死磕演算法·棧和佇列】僅用遞迴實現棧的逆序
題目要求:實現棧的逆序,但只能用遞迴函式和這個棧本身操作來實現,不能自己申請額外的資料結構。 題目思路: 實現兩個遞迴函式: getBottomItem():移除棧底元素並返回該元素 reverse():實現整個棧逆序 如何寫遞迴函式? 遞迴函式在函式體中
棧和佇列面試題(一)---一個數組實現兩個棧
一,用一個數組實現兩個棧(先進後出),有以下幾種方法: ①陣列的奇數位置儲存一個棧的元素,偶數位置儲存另一個棧的元素; ②兩個棧分別從陣列的中間向兩頭增長; 陣列的中間位置看做兩個棧的棧底,壓棧時棧頂指標分別向兩邊移動,當任何一邊到達陣列的起始位置或是陣
1. 棧和佇列的陣列實現
用陣列實現一個棧 棧頂元素下標index與其對應的陣列元素下標f(index)之間的對映關係是怎樣的?隨著棧的增長,棧頂元素下標依次為0,1,2...n-1,其中n表示棧的最大高度。我們需要制定一種對映規則f,方便我們通過index計算出f(index)。而最簡單的規則就是f(index) = inde
棧和佇列的基本操作實現
《資料結構》(c語言版)——第三章、棧和佇列 抽象資料型別——棧 順序儲存結構: #include<stdio.h> #include<stdlib.h> #include<string.h> #define ok 1 #defin
《劍指Offer》棧和佇列--用兩個棧實現佇列
時間限制:1秒 空間限制:32768K 熱度指數:317529 本題知識點: 佇列 棧 題目描述 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 思路: 首先需要清楚的是,棧的特點是:先進後出;佇列
java中棧和佇列的實現和API用法
在java中要實現棧和佇列,需要用到java集合的相關知識,特別是Stack、LinkedList等相關集合型別。 一、棧的實現 棧的實現,有兩個方法:一個是用java本身的集合型別Stack型別;另一個是借用LinkedList來間接實現Stack。 1.Stack實現