栈的实现(数组)

来源:互联网 发布:淘宝食品店开店要求 编辑:程序博客网 时间:2024/06/11 19:23

1.主要实现了创建、入栈、出栈、销毁等操作,代码如下:

////  Stack.h//  StackArray////  Created by Mac on 15/11/22.//  Copyright © 2015年 Mac. All rights reserved.//#ifndef Stack_h#define Stack_h#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#define EMPTY_STACK_TOP  -1#define MAX_STACK_SIZE 1024*1024typedef struct _tagStack{        int top;   //when top = -1, stack is empty;    int size;    void** data;}Stack;//stack createStack* StackCreate(int maxSize);//pushint StackPush(Stack* st,void* data);//popvoid* StackPop(Stack* st);//topvoid* StackTop(Stack* st);//isEmptybool StackIsEmpty(Stack* st);//isFullbool StackIsFull(Stack* st);//stack destroyvoid StackDestroy(Stack* st);#endif /* Stack_h */

////  Stack.c//  StackArray////  Created by Mac on 15/11/22.//  Copyright © 2015年 Mac. All rights reserved.//#include "Stack.h"//stack createStack* StackCreate(int maxSize){    if (maxSize > MAX_STACK_SIZE) {        maxSize = MAX_STACK_SIZE;    }    Stack* st = (Stack*)malloc(sizeof(Stack));    if (st == NULL) {        return NULL;    }        st->data = (void**)malloc(sizeof(void*)*maxSize);    if(st->data == NULL)        return NULL;        st->size = maxSize;    st->top = EMPTY_STACK_TOP;        memset(st->data,0,sizeof(sizeof(void*)*maxSize));    return st;}//pushint StackPush(Stack* st,void* data){    if(st == NULL || data == NULL){        return -1;    }        if (StackIsFull(st)) {        return -2;    }        st->top++;    st->data[st->top] = data;        return 0;}//popvoid* StackPop(Stack* st){    if (st == NULL) {        return NULL;    }    if (StackIsEmpty(st)) {        return NULL;    }    void* data = st->data[st->top];    st->data[st->top] = NULL;    st->top--;        return data;}//topvoid* StackTop(Stack* st){        if (st == NULL) {        return NULL;    }    if (StackIsEmpty(st)) {        return NULL;    }    return st->data[st->top];}//isEmptybool StackIsEmpty(Stack* st){    return st->top == EMPTY_STACK_TOP;}//isFullbool StackIsFull(Stack* st){    return st->top == st->size-1;}//stack destroyvoid StackDestroy(Stack* st){        if (st == NULL) {        return;    }        for (int i = 0; i<st->top; i++) {        if (st->data[i] != NULL) {            free(st->data[i]);            st->data[i] = NULL;        }    }        free(st->data);    st->data = NULL;    free(st);    st = NULL;}


0 0
原创粉丝点击