底层调用的是linkList来实现linkStack。
由于linkList是通过linkListNode来串联起来的,而linkStack没有linkListNode结构体,因此需要定义一个结构体来满足linkList的要求,这个过程叫做适配。
注意内存的分配和释放,这也是C++赋予程序员的灵活。
#ifndef LINKSTACK_H_INCLUDED #define LINKSTACK_H_INCLUDED typedef void 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); #endif // LINKSTACK_H_INCLUDED
#include "linkStack.h" #include "linkList.h" #include <stdio.h> #include <string.h> #include <stdlib.h> typedef void linkStack; typedef struct _stackNode { linkListNode node; void * item; }stackNode; linkStack* linkStack_Create() { return Creat(); } void linkStack_Destroy(linkStack* stack) { linkStack_Clear(stack); Destroy(stack); } void linkStack_Clear(linkStack* stack) { while(Length(stack) > 0) { linkStack_Pop(stack); } } int linkStack_Push(linkStack* stack, void* item) { stackNode *tmp = (stackNode*)malloc(sizeof(stackNode)); tmp->item = item; int ret = Insert(stack, (linkListNode*)tmp, 0); if(ret!=0) { printf("linkStack_Push malloc failed!\n"); free(tmp); } return ret; } void* linkStack_Pop(linkStack* stack) { stackNode *tmp = (stackNode*)Delete(stack, 0); if(tmp==NULL) return NULL; void *ret = tmp->item; free(tmp); return ret; } void* linkStack_Top(linkStack* stack) { stackNode* tmp = (stackNode*)Get(stack,0); return tmp->item; } int linkStack_Size(linkStack* stack) { return Length(stack); }
原文地址:https://www.cnblogs.com/randyniu/p/9175075.html
时间: 2024-10-05 02:21:49