C和C++实现Stack

来源:互联网 发布:淘宝号被冻结解冻方法 编辑:程序博客网 时间:2024/05/18 15:51
 

C和C++实现Stack

分类: 2. C/C++ 2066人阅读 评论(2) 收藏 举报
c++cstructnullclass语言
/************************************************************************/
/*  使用c++实现Stack                                                    */
/************************************************************************/

#include 
<stdio.h>

class Stack
{
public:
    Stack();
    
~Stack();
    
void Push(void* data);
    
void* Pop();
protected:
    typedef 
struct elementT {
        
struct elementT* next;
        
void* data;
    }element;
    element
* firstElement;
};

Stack::Stack() {
    firstElement 
= NULL;
    
return;
}

Stack::
~Stack() {
    element
* next;
    
while (firstElement)
    {
        next 
= firstElement-&gt;next;
        delete firstElement;
        firstElement 
= next;
    }
    
return;
}

void Stack::Push(void* data) {
    element
* ele = new element;
    ele
-&gt;data = data;
    ele
-&gt;next = firstElement;
    firstElement 
= ele;
    
return;
}

void* Stack::Pop() {
    element
* popElement = firstElement;
    
void* data;

    
if (firstElement == NULL)
    {
        
//handle the error
        
//throw StackError(E_EMPTY);
    }
    data 
= firstElement-&gt;data;
    firstElement 
= firstElement-&gt;next;
    delete popElement;
    
return data;
}

/************************************************************************/
/* 使用c语言实现Stack                                                   */
/************************************************************************/
#include 
<memory>

typedef 
struct elementT {
    
struct elementT* next;
    
void* data;
}element;

int CreateStack(element **stack)
{
    
*stack = NULL;
    
return 1;
}

int Push(element** stack, void* data)
{
    element
* ele;
    ele 
= (element*) malloc(sizeof(element));
    
if (!ele)
    {
        
return 0;    
    }
    ele
-&gt;data = data;
    ele
-&gt;next = *stack;
    
*stack = ele;
    
return 1;
}

int Pop(element** stack, void** data)
{
    element
* ele;
    
if (!(ele = *stack))
    {
        
return 0;
    }
    
*data = ele-&gt;data;
    
*stack = ele-&gt;next;
    free(ele);
    
return 1;
}

int DeleteStack(element** stack)
{
    element
* next;
    
while (*stack)
    {
        next 
= (*stack)-&gt;next;
        free(
*stack);
        
*stack = next;
    }
    
return 1;
}
</memory></stdio.h>
0 0
原创粉丝点击