数据结构之-c语言实现栈的顺序存储

数据结构之---c语言实现栈的顺序存储
//栈的顺序存储
//杨鑫
#include <stdio.h>
#include <stdlib.h>
//定义栈的大小
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2

//定义函数返回值的状态
typedef int Status;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 1
#define INFEASIBLE -1
#define OVERFLOW -2

//定义结构体
typedef int SElemType;
typedef struct SqStack
{
	SElemType *base;			//栈底
	SElemType *top;				//栈顶
	int stacksize;				//栈的大小
}SqStack;

//栈的初始化
Status init_Stack(SqStack *S)
{
		(*S).base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
		if(!(*S).base)
				exit(OVERFLOW);
		(*S).top = (*S).base;
		(*S).stacksize = STACK_INIT_SIZE;
		return OK;
}

//栈的销毁
Status destory_Stack(SqStack *S)
{
		free((*S).base);
		(*S).base = NULL;
		(*S).top = NULL;
		(*S).stacksize = 0;
		return OK;
}

//栈的清空
Status clear_Stack(SqStack *S)
{
		(*S).top = (*S).base;
		return OK;
}

//判断栈是否为空
Status isempty_Stack(SqStack S)
{
	if(S.top == S.base)
			return TRUE;
	else
			return FALSE;
}

int length_Stack(SqStack S)
{
	return S.top - S.base;
}	

//返回栈顶元素
Status get_Top(SqStack S, SElemType *e)
{
	if(S.top > S.base)
	{
			*e = *(S.top - 1);
			return OK;
	}
	else
			return ERROR;
}

//压栈
Status push(SqStack *S, SElemType e)
{
	if((*S).top - (*S).base >= (*S).stacksize)
	{
		(*S).base= (SElemType *)realloc((*S).base, ((*S).stacksize+STACKINCREMENT) * sizeof(SElemType));
		if(!(*S).base)
			exit(OVERFLOW);
		(*S).top = (*S).base + (*S).stacksize;
		(*S).stacksize += STACKINCREMENT;		
	}
	*((*S).top)++ = e;
	return OK;
}

//出栈
Status pop(SqStack *S, SElemType *e)
{
		if((*S).top == (*S).base)
				return ERROR;
		*e = *--(*S).top;
		return OK;
}

//遍历栈的元素
Status traverse_Stack(SqStack S)
{
		while(S.top > S.base)
		{
			printf("%d ", *S.base++);
		}
		printf("\n");
		return OK;
}


int main()
{
	int j;
    SqStack s;
    SElemType e;
    if(init_Stack(&s)==OK)
      for(j=1;j<=12;j++)
        push(&s, j);
   	printf("栈中元素依次为:\n");
    traverse_Stack(s);
   	pop(&s, &e);
   	printf("弹出的栈顶元素 e = %d\n", e);
   	printf("栈空否:%d ( 1 : 空  0:否)\n", isempty_Stack(s));
   	get_Top(s, &e);
   	printf("栈顶元素 e = %d 栈的长度为 %d \n",e, length_Stack(s));
  	clear_Stack(&s);
   	printf("清空栈后,栈空否:%d( 1 : 空  0 : 否)\n", isempty_Stack(s));
   	destory_Stack(&s);
   	printf("销毁栈后,s.top = %u s.base = %u s.stacksize = %d\n", s.top, s.base, s.stacksize);	
	return 0;
}



如图:


数据结构之-c语言实现栈的顺序存储