/*
 * stack.h
 *
 *  Created on: Nov 6, 2010
 *      Author: jenson
 */

#ifndef STACK_H_
#define STACK_H_

typedef int item_type;
typedef struct _stack_* stack;

struct _stack_{
    item_type * item;
    int top;
    int size;
};
stack stack_init(int max);
int stack_empty(stack);
void stack_push(stack,item_type);
item_type stack_pop();

#endif /* STACK_H_ */

/*
 * stack.c
 *
 *  Created on: Nov 6, 2010
 *      Author: jenson
 */

#include "stack.h"

stack stack_init(int max){
    stack s = malloc(sizeof(struct _stack_));
    s->item = malloc(sizeof( item_type) * max);
    s->size = sizeof(item_type) * max;
    s->top = 0;
}

int stack_empty(stack s){
    return s->top == 0;
}

void stack_push(stack s,item_type e){
    s->item[s->top++] = e;
}

item_type stack_pop(stack s){
    return s->item[--s->top];
}

测试代码:

/*
 * main.c
 *
 *  Created on: Nov 6, 2010
 *      Author: jenson
 */

#include <stdio.h>
#include <stdlib.h>
#include "stack.h"

int main(){
    stack s = stack_init(10);
    if(s == NULL){
        perror("stack_init");
        exit(1);
    }

    int i = 0;

    for(i = 1;i<=10;i++){
        stack_push(s,i);
    }

    for(i =1;i<=10;i++){
        printf("%d\t",stack_pop(s));
    }

    printf("\nis empty:%d\n",stack_empty(s));

    free(s);
    return 0;
}