这个是在前面链式存储结构的基础上实现代码复用
/*linkStack.h*/
#pragma once
#include "mlinkList.h"
using LinkStack = LinkList;
struct LinkStackNode {
LinkListNode node;
void *item;
};
class linkStack {
private:
mlinkList chen;
public:
linkStack();
~linkStack();
LinkStack* LinkStack_Create();
void LinkStack_Destroy(LinkStack* stack);
void LinkStack_Clear(LinkStack* stack);
int LinkStack_Push(LinkStack* stack, void* item);
void* LinkStack_Pop(LinkStack* stack);
void* LinkStack_Top(LinkStack* stack);
int LinkStack_Size(LinkStack* stack);
};
/*linkStack.cpp*/
#include "linkStack.h"
linkStack::linkStack() { }
linkStack::~linkStack() { }
LinkStack* linkStack::LinkStack_Create() {
return chen.LinkList_Create();
}
void linkStack::LinkStack_Destroy(LinkStack* stack) {
LinkStack_Clear(stack);
chen.LinkList_Destroy(stack);
}
void linkStack::LinkStack_Clear(LinkStack* stack) {
while ( LinkStack_Size(stack)>0 ) {
LinkStack_Pop( stack );
}
}
int linkStack::LinkStack_Push(LinkStack* stack, void* item) {
int ret = (stack != nullptr);
if ( ret ) {
LinkStackNode *node = (LinkStackNode*)malloc(sizeof(LinkStackNode));
if ( node!=nullptr ) {
node->item = item;
ret = chen.LinkList_Insert(stack, &node->node, 0);
if ( !ret ) {
free( node );
node = nullptr;
}
}
}
return ret;
}
void* linkStack::LinkStack_Pop(LinkStack* stack) {
LinkStackNode *node = (LinkStackNode*)chen.LinkList_Delete(stack,0);
void *ret = nullptr;
if ( node!=nullptr ) {
ret = node->item;
free(node);
}
return ret;
}
void* linkStack::LinkStack_Top(LinkStack* stack) {
LinkStackNode *node = (LinkStackNode*)chen.LinkList_Get( stack ,0 );
void *ret = nullptr;
if ( node!=nullptr ) {
ret = node->item;
}
return ret;
}
int linkStack::LinkStack_Size(LinkStack* stack) {
return chen.LinkList_Length(stack);
}
/*main.cpp*/
#include "linkStack.h"
int main(int argc, char **argv) {
linkStack chen;
LinkStack *stack = chen.LinkStack_Create();
int a[10];
for (int i = 0; i < 10; ++i) {
a[i] = i;
chen.LinkStack_Push(stack, a + i);
}
cout << "top : " << *(int*)chen.LinkStack_Top(stack) << endl;
while ( chen.LinkStack_Size(stack)>0 ) {
cout << *(int*)chen.LinkStack_Pop(stack) << endl;
}
chen.LinkStack_Destroy(stack);
system( "pause" );
return 0;
}