#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

struct LinkNode
{
    int data;
    struct LinkNode* next;
};

struct Stack
{
    struct LinkNode* head;
    int size;
};

void StackInit(struct Stack* stack)
{
    stack->head = NULL;
    stack->size = 0;
}

void StackPush(struct Stack* stack, const int num)
{
    struct LinkNode* node = (struct LinkNode*)malloc(sizeof(struct LinkNode));
    assert(node != NULL);
    node->data = num;
    node->next = stack->head;
    stack->head = node;
    ++stack->size;
    return;
}

int StackEmpty(struct Stack* stack)
{
    return (stack->size == 0);
}

int StackPop(struct Stack* stack, int* num)
{
    if (StackEmpty(stack) == 1)
        return 0;

    *num = stack->head->data;
    struct LinkNode* tmp;
    tmp = stack->head;
    stack->head = stack->head->next;
    --stack->size;
    free(tmp);
    return 1;
}

void StackCleanup(struct Stack* stack)
{
    struct LinkNode* tmp;
    while (stack->head != NULL)
    {
        tmp = stack->head;
        stack->head = stack->head->next;
        free(tmp);
    }

    stack->size = 0;
    return;
}

int main(void)
{
    struct Stack stack;
    StackInit(&stack);
    int i;
    for (i = 0; i < 5; i++)
    {
        StackPush(&stack, i);
    }

    while (!StackEmpty(&stack))
    {
        StackPop(&stack, &i);
        printf("%d ", i);
    }

    printf("\n");
    return 0;
}

 

#include <iostream>
using namespace std;

class Stack
{
    struct Link
    {
        int data_;
        Link* next_;
        Link(int data, Link* next) :data_(data), next_(next)
        {

        }
    };

public:
    Stack() :head_(0), size_(0)
    {

    }

    ~Stack()
    {
        Link* tmp;
        while (head_ != NULL)
        {
            tmp = head_;
            head_ = head_->next_;
            delete tmp;
        }

        return;
    }

    void Push(const int num)
    {
        Link* node = new Link(num, head_);
        head_ = node;
        ++size_;
        return;
    }

    bool Empty()
    {
        return (size_ == 0);
    }

    bool Pop(int& num)
    {
        if (Empty() == 1)
            return false;

        num = head_->data_;
        Link* tmp = head_;
        head_ = head_->next_;
        --size_;
        delete tmp;
        return true;
    }

private:
    Link *head_;
    int size_;
};

int main(void)
{
    Stack stack;
    int i;
    for (i = 0; i < 5; i++)
    {
        stack.Push(i);
    }

    while (!stack.Empty())
    {
        stack.Pop(i);
        cout<<i<<" ";
    }

    cout<<endl;
    return 0;
}

 

posted on 2016-08-30 15:41  pan.panda  阅读(184)  评论(0编辑  收藏  举报