栈的模拟

//static.h
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>

#define N 100

typedef struct stack
{
    int data[N];
    int top;//标识栈顶
}Stack;

void init(Stack *p);//初始化
int isEmpty(Stack *p);//判断栈是否空
int isFull(Stack *p);//判断栈溢出
int getTop(Stack *p);//获取栈顶
void push(Stack *p, int key);//插入数据
void pop(Stack *p);//出栈
void show(Stack *p);
//stack.c
#include "static.h"


void init(Stack *p)//初始化
{
    p->top = -1;//代表为空
    memset(p->data, 0, sizeof(int)*N);//数据清零
}

int isEmpty(Stack *p)//判断栈是否空
{
    if (p->top == -1)
    {
        return 1;//1为空
    }
    else
    {
        return 0;
    }
}

int isFull(Stack *p)//判断栈溢出
{
    if (p->top == N - 1)
    {
        return 1;//溢出
    }
    else
    {
        return 0;
    }
}

int getTop(Stack *p)//获取栈顶
{
    return p->data[p->top];//获取栈顶
}

void push(Stack *p, int key)//插入数据
{
    if (isFull(p) == 1)
    {
        return;
    }
    else
    {
        p->top++;
        p->data[p->top] = key;//压入数据
    }
}

void pop(Stack *p)//出栈
{
    if (isEmpty(p) == 1)
    {
        return;
    }
    else
    {
        p->top -= 1;
    }
}

void show(Stack *p)
{
    if (isEmpty(p) == 1)
    {
        return;
    }
    else
    {
        printf("\n栈的数据是\n");
        for (int i = 0; i <= p->top; i++)
        {
            printf("%4d", p->data[i]);
        }
        printf("\n");
    }
}
//main.c
#include "static.h"

void main()
{
    int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

    Stack myStack;
    init(&myStack);
    for (int i = 0; i < 10; i++)
    {
        push(&myStack, a[i]);
    }
    while (!isEmpty(&myStack))
    {
        printf("%d", getTop(&myStack));
        pop(&myStack);
    }
    printf("\n");

    system("pause");
}

 

posted @ 2016-01-15 08:40  喵小喵~  阅读(159)  评论(0编辑  收藏  举报