• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            類模板實(shí)現(xiàn)堆棧-VC編程

            Posted on 2009-10-06 01:55 S.l.e!ep.¢% 閱讀(519) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++
            類模板實(shí)現(xiàn)堆棧-VC編程
            2008-05-29 08:16:40

            采用了三種實(shí)現(xiàn)方法:

            1、自己定義數(shù)組(Stack 堆棧數(shù)組大小不能動(dòng)態(tài)增加)

            2、使用STL的vector(Vector_Stack 堆棧數(shù)組可動(dòng)態(tài)變化)

            3、使用STL的list(List_Stack 堆棧數(shù)組可動(dòng)態(tài)變化)


            以下是stack.h的頭文件,所有接口函數(shù)都寫(xiě)為內(nèi)聯(lián),因此沒(méi)有實(shí)現(xiàn)文件。
            正在裝載數(shù)據(jù)……


            #ifndef ___STACK_H___
            #define ___STACK_H___

            #include <windows.h>
            #include <vector>

            using namespace std;

            template<class T,int size = 100>
            class Stack
            {
            public:
            Stack():top(0){}
            ~Stack(){};

            int Push(T& data)
            {
            if (top >= size)
            {
            return top;
            }
            stack[top ] = data;
            return top;
            }
            int Pop(T* pData)
            {
            if (top <= 0)
            {
            return -1;
            }
            *pData = stack[--top];
            return 0;
            }
            int Size()
            {
            return top;
            }
            int Clear()
            {
            top = 0;
            return 0;
            }
            int Peek(T* pData)
            {
            *pData = stack[top];
            return 0;
            }
            BOOL IsEmpty()
            {
            return (top > 0 ? FALSE : TRUE);
            }
            protected:
            private:
            T stack[size];
            int top;
            };


            template<class T>
            class Vector_Stack
            {
            public:
            Vector_Stack(){}
            ~Vector_Stack(){};

            int Push(T& data)
            {
            vstack.push_back(data);
            return vstack.size();
            }
            int Pop(T* pData)
            {
            if (vstack.empty())
            {
            *pData = 0;
            return -1;
            }
            else
            {
            *pData = vstack.back();
            vstack.pop_back();
            return 0;
            }
            }
            int Size()
            {
            return vstack.size();
            }
            int Clear()
            {
            vstack.clear();
            return 0;
            }
            int Peek(T* pData)
            {
            *pData = vstack.back();
            return 0;
            }
            BOOL IsEmpty()
            {
            return (vstack.empty() ? TRUE : FALSE);
            }
            protected:
            private:
            vector<T> vstack;
            };

            template<class T>
            class List_Stack
            {
            public:
            List_Stack(){}
            ~List_Stack(){};

            int Push(T& data)
            {
            lstack.push_back(data);
            return lstack.size();
            }
            int Pop(T* pData)
            {
            if (lstack.empty())
            {
            *pData = 0;
            return -1;
            }
            else
            {
            *pData = lstack.back();
            lstack.pop_back();
            return 0;
            }
            }
            int Size()
            {
            return lstack.size();
            }
            int Clear()
            {
            lstack.clear();
            return 0;
            }
            int Peek(T* pData)
            {
            *pData = lstack.back();
            return 0;
            }
            BOOL IsEmpty()
            {
            return (lstack.empty() ? TRUE : FALSE);
            }
            protected:
            private:
            vector<T> lstack;
            };

            #endif

            檢驗(yàn)代碼:

            // 模板(棧).cpp : Defines the entry point for the console application.
            //

            #include "stdafx.h"
            #include "stack.h"

            #include <vector>
            #include <iostream>

            using namespace std;

            int main(int argc, char* argv[])
            {
            /************************************************************************/
            /* Stack */
            /************************************************************************/
            cout<<"********** Stack **********"<<endl;

            int i,nSize;
            int data;
            const int size = 3;
            Stack<int,size> intStack;

            cout<<"set stack size=3"<<endl;

            for (i=0;i<3;i )
            {
            data = (i 1)*100;
            intStack.Push(data);
            cout<<"push "<<data<<endl;
            }
            cout<<"size="<<intStack.Size()<<endl;

            for (i=0;i<size 1;i )
            {
            if (!intStack.Pop(&data))
            {
            cout<<"pop data:"<<data<<endl;
            }
            }
            cout<<"size="<<intStack.Size()<<endl<<endl;

            /************************************************************************/
            /* Vector_Stack */
            /************************************************************************/
            cout<<"********** Vector_Stack **********"<<endl;

            Vector_Stack<int> vIntStack;

            for (i=0;i<5;i )
            {
            data = (i 1)*10;
            vIntStack.Push(data);
            cout<<"push "<<data<<endl;
            }
            nSize = vIntStack.Size();
            cout<<"size="<<nSize<<endl;

            for (i=0;i<nSize 1;i )
            {
            vIntStack.Pop(&data);
            cout<<"pop data:"<<data<<endl;
            }
            nSize = vIntStack.Size();
            cout<<"size="<<nSize<<endl;

            cout<<"IsEmpty="<<vIntStack.IsEmpty()<<endl<<endl;

            /************************************************************************/
            /* List_Stack */
            /************************************************************************/
            cout<<"********** List_Stack **********"<<endl;

            List_Stack<int> lIntStack;

            for (i=0;i<5;i )
            {
            data = (i 1)*10;
            lIntStack.Push(data);
            cout<<"push "<<data<<endl;
            }
            nSize = lIntStack.Size();
            cout<<"size="<<nSize<<endl;

            for (i=0;i<nSize 1;i )
            {
            lIntStack.Pop(&data);
            cout<<"pop data:"<<data<<endl;
            }
            nSize = lIntStack.Size();
            cout<<"size="<<nSize<<endl;

            cout<<"IsEmpty="<<lIntStack.IsEmpty()<<endl;

            return 0;
            }


            運(yùn)行結(jié)果為:

            ********** Stack **********
            set stack size=3
            push 100
            push 200
            push 300
            size=3
            pop data:300
            pop data:200
            pop data:100
            size=0

            ********** Vector_Stack **********
            push 10
            push 20
            push 30
            push 40
            push 50
            size=5
            pop data:50
            pop data:40
            pop data:30
            pop data:20
            pop data:10
            pop data:0
            size=0
            IsEmpty=1

            ********** List_Stack **********
            push 10
            push 20
            push 30
            push 40
            push 50
            size=5
            pop data:50
            pop data:40
            pop data:30
            pop data:20
            pop data:10
            pop data:0
            size=0
            IsEmpty=1
            Press any key to continue


            文章轉(zhuǎn)載自『幽月's Blog』

            中文字幕久久精品| 中文成人久久久久影院免费观看| 亚洲精品乱码久久久久66| 青青草原综合久久大伊人| 久久亚洲AV无码精品色午夜麻豆| 久久精品国产免费观看三人同眠| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产人久久人人人人爽| 久久久久亚洲精品中文字幕 | 久久精品国产99国产精品澳门| 69SEX久久精品国产麻豆| 久久久精品国产亚洲成人满18免费网站| 亚洲国产综合久久天堂 | 人妻无码精品久久亚瑟影视| 丰满少妇人妻久久久久久| 久久久久噜噜噜亚洲熟女综合| 亚洲国产精品无码久久久不卡| 色综合久久久久| 久久精品人人做人人爽97 | 伊人久久大香线蕉AV一区二区| 久久精品人人做人人爽电影| 亚洲精品美女久久久久99小说| 国产成人精品久久二区二区| 亚洲精品视频久久久| 久久亚洲AV无码西西人体| 精品国产乱码久久久久久1区2区| 综合久久国产九一剧情麻豆| 久久国产香蕉视频| 久久综合狠狠综合久久激情 | 久久天天躁狠狠躁夜夜不卡| 国产精品成人无码久久久久久 | 99蜜桃臀久久久欧美精品网站| 久久精品中文字幕第23页| 久久午夜电影网| 精品一区二区久久| 国产成人久久AV免费| 久久精品国产亚洲AV嫖农村妇女| 久久国语露脸国产精品电影| 精品国产乱码久久久久软件| 伊人 久久 精品| 青草国产精品久久久久久|