1. 程式人生 > >C++__鏈式棧(練習)

C++__鏈式棧(練習)

num nbsp private emp ace public int set namespace

鏈式棧

stack.h

#ifndef STACK_H_
#define STACK_H_

typedef int data_type;

enum STACK_OP {
    STACK_ERR = -1, STACK_OK, STACK_EMPTY
};

class STACK {
private:
    data_type data;
    STACK *next;
public:
    STACK();
    STACK(data_type data);
    ~STACK();

    data_type getData() const;
    STACK 
*getNext() const; void setData(data_type data); void setNext(STACK *next); int Push(STACK *pStack, data_type tData); int Pop(STACK *pStack, data_type *pData); int IsEmpty(STACK *pStack); void operator delete(void *pStack); }; #endif /* STACK_H_ */

stack.cpp

#include "STACK.h
" #include <iostream> using namespace std; STACK::STACK(data_type data) { // TODO Auto-generated constructor stub this->setData(data); this->setNext(NULL); cout<<"STACK(data)"<<endl; } STACK::STACK() { // TODO Auto-generated constructor stub this->setData(0
); this->setNext(NULL); cout<<"STACK"<<endl; } STACK::~STACK() { // TODO Auto-generated destructor stub cout<<"~STACK"<<endl; } data_type STACK::getData() const { return data; } STACK *STACK::getNext() const { return next; } void STACK::setData(data_type data) { this->data = data; } void STACK::setNext(STACK *next) { this->next = next; } int STACK::Push(STACK *pStack, data_type tData) { if (!pStack) return STACK_ERR; STACK *New = new STACK(tData); if (!New) return STACK_ERR; New->setNext(pStack->getNext()); pStack->setNext(New); return STACK_OK; } int STACK::Pop(STACK *pStack, data_type *pData) { if ((!pStack) || (!pData)) return STACK_ERR; STACK *Tmp = pStack->getNext(); if (!Tmp) { cout << "pop over" << endl; return STACK_ERR; } *pData = Tmp->getData(); pStack->setNext(Tmp->getNext()); Tmp->setNext(NULL); delete Tmp; return STACK_OK; } int STACK::IsEmpty(STACK *pStack) { if (!pStack) return STACK_ERR; if (!pStack->getNext()) return STACK_EMPTY; return STACK_OK; } void STACK::operator delete(void *pStack) { if (!pStack) return; STACK *Tmp = ((STACK *)pStack)->getNext(); while(Tmp){ ((STACK *)pStack)->setNext(Tmp->getNext()); free(Tmp); Tmp = ((STACK *)pStack)->getNext(); } free(pStack); return; }

main.cpp

#include "STACK/STACK.h"
#include <iostream>
using namespace std;

void function() {
    STACK *pStack = new STACK;
    int *data = new int[5];
    int pdata;
    int i;
    for (i = 4; i >= 0; i--) {
        data[i] = i;
    }
    for (i = 5; i >= 0; i--) {
        pStack->Push(pStack, i);
        cout << i << "  ";
    }
    cout << endl;
    for (i = 5; i >= 0; i--) {
        pStack->Pop(pStack, &pdata);
        cout << pdata << " ";
    }
    cout << endl;
    pStack->Push(pStack, 9);
    pStack->Pop(pStack, &pdata);
    cout << pdata << " ";
    pStack->Push(pStack, 5);
    pStack->Push(pStack, 3);
    pStack->Push(pStack, 7);
    pStack->Pop(pStack, &pdata);
    cout << pdata << " ";
    pStack->Push(pStack, 0);
    pStack->Pop(pStack, &pdata);
    cout << pdata << " ";
    pStack->Pop(pStack, &pdata);
    cout << pdata << " ";
    pStack->Pop(pStack, &pdata);
    cout << pdata << " " << endl;
    delete pStack;
}

int main() {
    function();
    return 0;
}

C++__鏈式棧(練習)