seqStack

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值