栈——代码实现

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10
#define MALLOC_OK 1
#define MALLOC_NO 0
#define CREATE_OK 1
#define CREATE_NO 0

enum ret_val{FULL_OK=100,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK,PUSH_NO,POP_OK,POP_NO };	//枚举类型{枚举常量}

//结构体类型,不可以赋值
struct stack_node
{
    int stack_data[SIZE];
    int top;
};		//分号别忘

typedef struct stack_node Stack;
//创建(顺序栈)
void create_stack(Stack ** stack)
{
    *stack = (Stack *)malloc(sizeof(Stack));
}

//初始化top
void init_stack(Stack * stack)
{
    stack->top= -1;
}

//判断是否满栈
int is_full(Stack * stack)
{
    if(stack->top >= SIZE-1)
    {
	return FULL_OK;
    }
    return FULL_NO;
}

//判断是否空栈
int is_empty(Stack * stack)
{
    if(stack->top == -1)
    {
        return EMPTY_OK;
    }
    return EMPTY_NO;
}

//进栈
int push_stack(Stack *stack,int num)
{

    if(FULL_NO == is_full(stack))
    {
/*
        stack->top++;
        stack->stack_data[top]=num;
*/
        stack->stack_data[++stack->top]=num;		//等价于上面
    
        return PUSH_OK;
    }
    printf("stack is full!\n");
    return PUSH_NO;
}

//出栈
int  pop_stack(Stack *stack)
{
    if(EMPTY_NO == is_empty(stack))
    {
	return stack->stack_data[stack->top--];
    }
    return POP_NO;
}

//取栈顶
int gettop_stack(Stack *stack,int num)

//置空栈
void empty_stack(Stack *stack)

int main()
{
    Stack * stack;

    int i;
    int num;
    create_stack(&stack);
    init_stack(stack);

    for(i=0;i<10;i++)
    {
	if(PUSH_OK == push_stack(stack,i+1))
	{
	printf("%4d",i);
	}
	else
	{
	    printf("push stack fail!\n");
	}
    }
	
    printf("\n");
    

    for(i=0;i<10;i++)
    {
	num = pop_stack(stack);

	if(POP_NO != num)
	{
	    printf("%4d",num);
	}
	else
	{
	    printf("pop stack fail!\n");
	}
    }
	printf("\n");
    
   

	free(stack);

    return 0;
}

posted on 2022-02-19 15:41  慧茗子  阅读(28)  评论(0)    收藏  举报  来源