stack栈

#ifndef _ARRAYSTACK_H_
#define _ARRAYSTACK_H_


#include<malloc.h>
#include<stdio.h>
#include<conio.h>


typedef struct USER_TYPE
{
int age;
int clas;
char *name;
double weight;
} USER_TYPE;


/**
*元素类型:USER_TYPE
*头结点:ARRAYSTACK
*
*/
typedef struct ARRAYSTACK
{
USER_TYPE *data;
int stackMaxRoom;
int stackTop;
}ARRAYSTACK;


typedef unsigned int boolean;




#define    FALSE            0
#define    TRUE             1


#define    STACK_BUTTOM     (-1)




boolean InitArrayStack(ARRAYSTACK **stack,int stackMaxRoom);
void DestroyArrayStack(ARRAYSTACK **stack);
boolean IsArrayStackFull(ARRAYSTACK *head);
boolean IsArrayStackEmpty(ARRAYSTACK *head);
boolean PopArrayStackElement(ARRAYSTACK *head,USER_TYPE *vout);
boolean PushArrayStackElement(ARRAYSTACK *head,USER_TYPE vin);


boolean PushArrayStackElement(ARRAYSTACK *head,USER_TYPE vin)
{
boolean OK = TRUE;


if(IsArrayStackFull(head) == FALSE)
{
head->data[++head->stackTop] = vin;
}
else
{
OK = FALSE;
}


return OK;
}


boolean PopArrayStackElement(ARRAYSTACK *head,USER_TYPE *vout)
{
boolean OK = TRUE;


if(IsArrayStackEmpty(head) == FALSE)
{
(*vout) = head->data[head->stackTop--];
}
else
{
OK = FALSE;
}


return OK;
}


boolean IsArrayStackEmpty(ARRAYSTACK *head)
{
boolean OK = TRUE;
OK = (head->stackTop == STACK_BUTTOM);
return OK;
}


boolean IsArrayStackFull(ARRAYSTACK *head)
{
boolean OK = TRUE;
OK = (head->stackTop >= head->stackMaxRoom);
return OK;
}


void DestroyArrayStack(ARRAYSTACK **stack)
{
if((*stack) != NULL)
{
if((*stack)->data != NULL)
{
free((*stack)->data);
(*stack)->data = NULL;
}


free((*stack));
(*stack) = NULL;
}
}
boolean InitArrayStack(ARRAYSTACK **stack,int stackMaxRoom)
{
boolean OK = TRUE;


if((*stack) != NULL)
{
OK = FALSE;
}
else if(stackMaxRoom <= 0)
{
OK = FALSE;
}
else//(*stack)==NULL && stackMaxRoom > 0
{
(*stack) = (ARRAYSTACK *)malloc(sizeof(ARRAYSTACK));
if((*stack) != NULL)
{
(*stack)->data = (USER_TYPE *)malloc(sizeof(USER_TYPE)*stackMaxRoom);


if((*stack)->data != NULL)
{
(*stack)->stackTop = STACK_BUTTOM;
(*stack)->stackMaxRoom = stackMaxRoom;
}
else
{
OK = FALSE;
free(*stack);
(*stack) = NULL;
}
}
else
{
OK = FALSE;
}
}


return OK;
}
/*
void main(void)
{
ARRAYSTACK *stack = NULL;
USER_TYPE v1={12,20,"张鹏",23.4},v2={15,30,"张三",34.4},t1,t2;
int i;


InitArrayStack(&stack,10);
PushArrayStackElement(stack,v1);
PushArrayStackElement(stack,v2);
PopArrayStackElement(stack,&t1);
PopArrayStackElement(stack,&t2);
printf("%4d %4d %s %lf %s\n",t1.age,t1.clas,t1.name,t1.weight);
printf("%4d %4d %s %lf %s\n",t2.age,t2.clas,t2.name,t2.weight);
printf("%s空栈",(IsArrayStackEmpty(stack)) ? "是" : "不是");
DestroyArrayStack(&stack);
getch();
}
*/


#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值