#ifndef _STACK_H_
#define _STACK_H_
#include<malloc.h>
#define TRUE 1
#define FALSE 0
typedef unsigned int boolean;
typedef struct STACK
{
USER_TYPE *data; // 指向堆栈空间的指针,以后将其看做数组
int stackMaxRoom; // 堆栈最大空间
int top; // 栈顶指针
}STACK;
boolean initStack(STACK **head, int maxRoom);
void destoryStack(STACK **head);
boolean isStackEmpty(STACK head);
boolean isStackFull(STACK head);
boolean push(STACK *head, USER_TYPE v);
boolean pop(STACK *head, USER_TYPE *v);
boolean readTop(STACK head, USER_TYPE *v);
boolean readTop(STACK head, USER_TYPE *v)
{
boolean Ok = TRUE;
if(isStackEmpty(head) == TRUE)
Ok = FALSE;
else
*v = head.data[head.top-1];
return Ok;
}
boolean pop(STACK *head, USER_TYPE *v)
{
boolean Ok = TRUE;
if(isStackEmpty(*head) == TRUE)
Ok = FALSE;
else
*v = head->data[--head->top];
return Ok;
}
boolean push(STACK *head, USER_TYPE v)
{
boolean Ok = TRUE;
if(isStackFull(*head) == TRUE)
Ok = FALSE;
else
head->data[head->top++] = v;
return Ok;
}
boolean isStackFull(STACK head)
{
return head.stackMaxRoom <= head.top;
}
boolean isStackEmpty(STACK head)
{
return 0 == head.top;
}
void destoryStack(STACK **head)
{
if(*head != NULL)
{
if((*head)->data != NULL)
free((*head)->data);
free(*head);
*head = NULL;
}
}
boolean initStack(STACK **head, int maxRoom)
{
boolean Ok = TRUE;
if(maxRoom <= 0)
Ok = FALSE;
else
{
if(*head == NULL)
{
*head = (STACK *)malloc(sizeof(STACK));
if(*head == NULL)
Ok = FALSE;
else
{
(*head)->data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * maxRoom);
if((*head)->data != NULL)
{
(*head)->stackMaxRoom = maxRoom;
(*head)->top = 0;
}
else
{
free(*head);
*head = NULL;
Ok = FALSE;
}
}
}
else
Ok = FALSE;
}
return Ok;
}
#endif
#define _STACK_H_
#include<malloc.h>
#define TRUE 1
#define FALSE 0
typedef unsigned int boolean;
typedef struct STACK
{
USER_TYPE *data; // 指向堆栈空间的指针,以后将其看做数组
int stackMaxRoom; // 堆栈最大空间
int top; // 栈顶指针
}STACK;
boolean initStack(STACK **head, int maxRoom);
void destoryStack(STACK **head);
boolean isStackEmpty(STACK head);
boolean isStackFull(STACK head);
boolean push(STACK *head, USER_TYPE v);
boolean pop(STACK *head, USER_TYPE *v);
boolean readTop(STACK head, USER_TYPE *v);
boolean readTop(STACK head, USER_TYPE *v)
{
boolean Ok = TRUE;
if(isStackEmpty(head) == TRUE)
Ok = FALSE;
else
*v = head.data[head.top-1];
return Ok;
}
boolean pop(STACK *head, USER_TYPE *v)
{
boolean Ok = TRUE;
if(isStackEmpty(*head) == TRUE)
Ok = FALSE;
else
*v = head->data[--head->top];
return Ok;
}
boolean push(STACK *head, USER_TYPE v)
{
boolean Ok = TRUE;
if(isStackFull(*head) == TRUE)
Ok = FALSE;
else
head->data[head->top++] = v;
return Ok;
}
boolean isStackFull(STACK head)
{
return head.stackMaxRoom <= head.top;
}
boolean isStackEmpty(STACK head)
{
return 0 == head.top;
}
void destoryStack(STACK **head)
{
if(*head != NULL)
{
if((*head)->data != NULL)
free((*head)->data);
free(*head);
*head = NULL;
}
}
boolean initStack(STACK **head, int maxRoom)
{
boolean Ok = TRUE;
if(maxRoom <= 0)
Ok = FALSE;
else
{
if(*head == NULL)
{
*head = (STACK *)malloc(sizeof(STACK));
if(*head == NULL)
Ok = FALSE;
else
{
(*head)->data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * maxRoom);
if((*head)->data != NULL)
{
(*head)->stackMaxRoom = maxRoom;
(*head)->top = 0;
}
else
{
free(*head);
*head = NULL;
Ok = FALSE;
}
}
}
else
Ok = FALSE;
}
return Ok;
}
#endif