main.c
#include "seqStack.h"
void main()
{
seqStack s;
initSeqStack(&s);
if(TRUE == isEmptyStack(&s))
{
printf("stack is empty\n");
}
else
{
printf("stack is not empty\n");
}
int len = lengthSeqStack(&s);
printf("the stack len is:%d\n",len);
pushSeqStack(&s,1);
pushSeqStack(&s,2);
pushSeqStack(&s,3);
displaySeqStack(&s);
int a;
getTopSeqStack(&s,&a);
printf("top a=%d\n",a);
displaySeqStack(&s);
int b;
popSeqStack(&s,&b);
printf("pop b=%d\n",b);
displaySeqStack(&s);
len = lengthSeqStack(&s);
printf("the stack len is:%d\n",len);
destroySeqStack(&s);
}
makefile
main:main.o seqStack.o
gcc main.o seqStack.o -o main
main.o:seqStack.h main.c
gcc -c -g main.c -o main.o
seqStack.o:seqStack.h seqStack.c
gcc -c -g seqStack.c -o seqStack.o
clean:
rm -fr *.o
rm -fr main
seqStack.c
#include <assert.h>
#include "seqStack.h"
//init seqStack
int initSeqStack(seqStack *stack)
{
(*stack).base = (elemType*)malloc(sizeof(elemType)*INIT_STACK_SIZE);
if(NULL == (*stack).base)
{
printf("init overflow\n");
return OVERFLOW;
}
(*stack).top = (*stack).base;
(*stack).stackSize = INIT_STACK_SIZE;
return OK;
}
//destory seqStack
void destroySeqStack(seqStack *stack)
{
assert(NULL != stack);
(*stack).top = (*stack).base;
free((*stack).base);
(*stack).base = NULL;
(*stack).top = NULL;
(*stack).stackSize = 0;
}
int clearSeqStack(seqStack *stack)
{
assert(NULL != stack);
(*stack).top = (*stack).base;
(*stack).stackSize = 0;
return OK;
}
int isEmptyStack(seqStack *stack)
{
assert(NULL != stack);
if((*stack).top == (*stack).base)
{
return TRUE;
}
else
{
return FALSE;
}
}
int lengthSeqStack(seqStack *stack)
{
assert(NULL != stack);
int len = (*stack).top - (*stack).base;
return len;
}
int getTopSeqStack(seqStack *stack, elemType *e)
{
assert(NULL != stack);
if(0 == lengthSeqStack(stack))
{
return FALSE;
}
*e = *((*stack).top-1);
return OK;
}
int pushSeqStack(seqStack *stack, elemType e)
{
assert(NULL != stack);
if(((*stack).top-(*stack).base)>=(*stack).stackSize)
{
(*stack).base = (elemType*)realloc((*stack).base,sizeof(elemType)*(INIT_STACK_SIZE+INC_STACK_SIZE));
if(NULL == (*stack).base)
{
printf("realloc overflow\n");
return OVERFLOW;
}
(*stack).top = (*stack).base + INIT_STACK_SIZE;
(*stack).stackSize = INIT_STACK_SIZE+INC_STACK_SIZE;
}
*((*stack).top) = e;
(*stack).top ++;
return OK;
}
int popSeqStack(seqStack *stack, elemType *e)
{
assert(NULL != stack);
if(0 == (*stack).top-(*stack).base)
{
return FALSE;
}
*e = *((*stack).top-1);
(*stack).top = (*stack).top - 1;
return OK;
}
void displaySeqStack(seqStack *stack)
{
assert(NULL != stack);
elemType *p = (*stack).base;
printf("the stack data is:\n");
while(p != (*stack).top)
{
printf(" %d",*p);
p ++;
}
printf("\n");
}
seqstack.h
#ifndef SEQSTACK_H
#define SEQSTACK_H
#include<stdio.h>
#include<stdlib.h>
#define FALSE -1
#define TRUE 1
#define OVERFLOW -1
#define OK 1
#define INIT_STACK_SIZE 10
#define INC_STACK_SIZE 5
typedef int elemType;
typedef struct seqstack
{
elemType *base;
elemType *top;
int stackSize;
}seqStack;
int initSeqStack(seqStack *stack);
void destroySeqStack(seqStack *stack);
int clearSeqStack(seqStack *stack);
int isEmptyStack(seqStack *stack);
int lengthSeqStack(seqStack *stack);
int getTopSeqStack(seqStack *stack, elemType *e);
int pushSeqStack(seqStack *stack, elemType e);
void displaySeqStack(seqStack *stack);
int popSeqStack(seqStack *stack, elemType *e);
#endif