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*1024
typedef struct _tagStack{
int top; //when top = -1, stack is empty;
int size;
void** data;
}Stack;
//stack create
Stack* StackCreate(int maxSize);
//push
int StackPush(Stack* st,void* data);
//pop
void* StackPop(Stack* st);
//top
void* StackTop(Stack* st);
//isEmpty
bool StackIsEmpty(Stack* st);
//isFull
bool StackIsFull(Stack* st);
//stack destroy
void 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 create
Stack* 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;
}
//push
int 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;
}
//pop
void* 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;
}
//top
void* StackTop(Stack* st){
if (st == NULL) {
return NULL;
}
if (StackIsEmpty(st)) {
return NULL;
}
return st->data[st->top];
}
//isEmpty
bool StackIsEmpty(Stack* st){
return st->top == EMPTY_STACK_TOP;
}
//isFull
bool StackIsFull(Stack* st){
return st->top == st->size-1;
}
//stack destroy
void 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;
}