堆栈的操作

来源:互联网 发布:西门子编程电缆多少钱 编辑:程序博客网 时间:2024/06/05 11:59
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd.
File name:
Author:Jerey_Jobs    Version:0.1    Date:
Description:
Funcion List:
*****************************************************/

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

struct stack
{
 int stack[MAX];
 int top;
};

enum return_result
{
    FULL_OK,
 FULL_NO,
 PUSH_OK,
 PUSH_NO,
 EMPTY_OK,
 EMPTY_NO,
 POP_NO = 0xefffffff
};

typedef struct stack Stack;

void create_stack(Stack **stack);
void init_stack(Stack **stack);
int push_stack(Stack **stack,int num);
int is_full(Stack **stack);
int pop_stack(Stack **stack);
int is_empty(Stack **stack);

int main()
{
    Stack *stack;
 int i,loc;

 create_stack(&stack);

 init_stack(&stack);

 for(i = 0;i < MAX;i++)
 {
        if(push_stack(&stack,i+1) == PUSH_OK)
  {
   printf("push ok!\n");
  }
 }
 for(i = 0;i < 10;i++)
 {
  loc = pop_stack(&stack);
  if(loc == POP_NO)
  {
   break;
  }
        printf("stack[%d] = %d \n",i,loc);
 }
    return 0;
}

void create_stack(Stack **stack)
{
 *stack = (Stack *)malloc(sizeof(Stack));
 if(*stack == NULL)
 {
  printf("malloc error !\n");
  exit(-1);
 }
}

void init_stack(Stack **stack)
{
 (*stack)->top = -1;
}

int push_stack(Stack **stack,int num)
{
 if(is_full(stack) == FULL_OK)
 {
  printf("stack is full !\n");
  return PUSH_NO;
 }
 else
 {
  ((*stack)->top)++;
  ((*stack)->stack[((*stack)->top)]) = num;
  return PUSH_OK;
 }
}

int is_full(Stack **stack)
{
 if((*stack)->top == MAX)
 {
  return FULL_OK;
 }
 else
 {
  return FULL_NO;
 }
}

int pop_stack(Stack **stack)
{
 if(is_empty(stack) == EMPTY_OK)
 {
  return POP_NO;
 }
 else
 {
        return ((*stack)->stack[((*stack)->top)--]);  
 }

}

int is_empty(Stack **stack)
{
 if((*stack)->top == -1)
 {
  return EMPTY_OK;
 }
 else
 {
  return EMPTY_NO;
 }
}


0 0