1.主要实现了创建、入栈、出栈、销毁等操作,代码如下:
//
// Stack.h
// Stack
//
// 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>
typedef struct _tabStack{
void* data;
struct _tabStack* next;
}Stack;
//create Stack
Stack* StackCreate();
//push
int StackPush(Stack* st,void* data);
//pop
void* StackPop(Stack* st);
//top
void* StackTop(Stack* st);
//isEmpty
bool StackIsEmpty(Stack* st);
//destroy Stack
void StackDestroy(Stack* st);
#endif /* Stack_h */
//
// Stack.c
// Stack
//
// Created by Mac on 15/11/22.
// Copyright © 2015年 Mac. All rights reserved.
//
#include "Stack.h"
//create Stack
Stack* StackCreate(){
Stack* st = (Stack*)malloc(sizeof(Stack));
if(st == NULL)
return NULL;
memset(st,0,sizeof(Stack));
return st;
}
//push
int StackPush(Stack* st,void* data){
if (st == NULL || data == NULL) {
return -1;
}
Stack* node = (Stack*)malloc(sizeof(Stack));
if (node == NULL) {
return -2;
}
node->data = data;
node->next = st->next;
st->next = node;
return 0;
}
//pop
void* StackPop(Stack* st){
if (st == NULL) {
return NULL;
}
if(st->next == NULL)
return NULL;
Stack* tmp = st->next;
st->next = tmp->next;
void* data = tmp->data;
free(tmp);
tmp = NULL;
return data;
}
//top
void* StackTop(Stack* st){
if (st == NULL) {
return NULL;
}
if(st->next == NULL)
return NULL;
return st->next->data;
}
//isEmpty
bool StackIsEmpty(Stack* st){
return st->next == NULL;
}
//destroy Stack
void StackDestroy(Stack* st){
if (st == NULL) {
return;
}
Stack* p = st->next;
Stack * tmp = NULL;
while (p) {
tmp = p;
free(p->data);
p->data = NULL;
free(p);
p = NULL;
p = tmp->next;
}
free(st);
st = NULL;
}