| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 472 人关注过本帖
标题:栈的链表实现
只看楼主 加入收藏
liganglester
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2015-10-6
收藏
 问题点数:0 回复次数:0 
栈的链表实现
本想回答一个小伙伴的提问,结果没注意问题已经关闭。
贴在这里吧,如果有学些栈的新同学可以参考下。

程序代码:
//stack
struct StackNode{
    void* pData;
    StackNode* pNext;
};
typedef void (*FN_OutputNode)(void* pNode);
class Stack{
public:
    Stack(FN_OutputNode fnOutput);
    ~Stack();
    
    void push(void* pData);
    void* pop();
    void outputAll();
private:
    StackNode* m_pTop;
    FN_OutputNode m_fnOutput;
};

Stack::Stack(FN_OutputNode fnOutput)
{
    m_fnOutput=fnOutput;
    m_pTop=NULL;
}

void Stack::push(void* pData)
{
    StackNode* pNode = new StackNode();
    pNode->pData=pData;
    pNode->pNext = m_pTop; // link as head of old list
    m_pTop=pNode;//update list head
}

void* Stack::pop()
{
    if(NULL == m_pTop)
    {
        return m_pTop;
    }
    
    StackNode* pNode = m_pTop;
    m_pTop = m_pTop->pNext;
    
    void* pData = pNode->pData;
    delete pNode;
    
    return pData;
}

void Stack::outputAll()
{
    if(NULL == m_fnOutput)
    {
        return;
    }
    StackNode* pNode= m_pTop;// last one is output first
    while(pNode != NULL)
    {
        m_fnOutput(pNode->pData);
        pNode=pNode->pNext;
    }
}

Stack::~Stack()
{
    StackNode* pNode=m_pTop;
    while(pNode != NULL)
    {
        m_pTop=pNode->pNext;//update head to next

        delete pNode;// pNode->pData is managed by user of Stack class
        pNode= m_pTop;// the node to release
    }
}

void myoutput(void* p)
{
    printf((char*)p);
    printf("\r\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
    Stack s(myoutput);

    s.push("hi");
    s.push("how are you?");
    s.push("I am fine.");

    s.outputAll();

    
    Stack* pStack = new Stack(myoutput);

    pStack->push("hi");
    pStack->push("how are you????");
    pStack->push("I am fine.");

    pStack->outputAll();

    delete pStack;

    return 0;
}
搜索更多相关主题的帖子: 小伙伴 
2015-10-18 23:27
快速回复:栈的链表实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014582 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved