栈的基本操作

Stack.h

#ifndef __STACK_H__
#define __STACK_H__
#define MAXSIZE 10
typedef int DataType;


//定义栈
typedef struct StackNode
{
    DataType arr[MAXSIZE];
    int top;
}Stack, *pStack;

int EmptyStack(pStack ps);
void InitStack(pStack ps);
void PushStack(pStack ps, DataType data);
DataType PopStack(pStack ps);
DataType TopStack(pStack ps);
int StackLength(Stack ps);
void StackTraverse(Stack ps);
void ClearStack(pStack ps);
void DestroyStack(pStack ps);



#endif  //__STACK_H__

Stack.c

#include "stack.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


void InitStack(Stack* ps)
{
    assert(ps);

    ps->top = 0;
}

void PushStack(pStack ps, DataType data)
{
    assert(ps);

    ps->arr[ps->top++] = data;
}
//判断栈中是否为空
int EmptyStack(pStack ps)
{
    assert(ps);

    return 0 == ps->top;
}
//出栈
DataType PopStack(pStack ps )
{
    DataType e;
    assert(ps);

    if (EmptyStack(ps))
    {
        return 0;
    }
    else
    {
    ps->top--;
    e = ps->arr[ps->top];
    return e;
    }

}
//求栈顶的元素
DataType TopStack(pStack ps)
{
    assert(ps);
    if (EmptyStack(ps))
    {
        printf("栈为空!!!\n");
        return 0;
    }
    return ps->arr[ps->top - 1];
}
void StackTraverse(Stack ps)
{

     if (EmptyStack(&ps))
    {
        printf("栈为空!!!\n");
        return;
    }
    else
    {
        while(ps.top )
      {
          ps.top--;
          printf("%d",ps.arr[ps.top]);

      }

   }
}

int StackLength(Stack ps)
{
    if( EmptyStack(&ps) )
    {
      return 0;
    }
    return ps.top;

}

void ClearStack(Stack* ps)
{
    (*ps).top =0;   
}
void DestroyStack(pStack ps)
{
    ClearStack(ps);
    free(ps);

}

test.c

#include "stack.h"
#include <stdio.h>
void test()
{
     int e = 0;
     Stack stack; 
     printf("初始化栈\n");
     InitStack( &stack);

     printf("压栈\n");
     PushStack(&stack ,1);
     PushStack(&stack ,2);
     PushStack(&stack ,3);
     PushStack(&stack ,4);
     PushStack(&stack ,5);

     printf("遍历栈\n");
     StackTraverse(stack);
     printf("\n");
     printf("出栈\n"); 
     printf("出栈元素为:%d\n",PopStack(&stack));

     printf("遍历栈\n");
     StackTraverse(stack);
     printf("\n");

     printf("取栈顶\n");   
     printf("%d\n",TopStack(&stack));

     printf("获取栈的长度\n");    
     printf("%d\n",StackLength(stack));
     printf("判断是否为空栈\n");       
      if(EmptyStack(&stack))
     {
       printf("这是空栈\n");
     }
     else
     {
       printf("这不是空栈\n");
     }

     printf("清空栈\n");   
     ClearStack(&stack);
     printf("获取栈的长度\n");    
     printf("%d\n",StackLength(stack));

     printf("销毁栈\n");   
     DestroyStack(&stack);



}
int main()
{
      test();
      return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值