刺破数据结构-数据结构学习总结(第三章)b站 栈与队列1

栈:LIFO,头插,头出。

队列:尾插,头出。

栈的类型定义:

基本操作:

利用数组的顺序栈存储特点:

具体的实现:

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OVERFLOW 0
#define OK 1
#define TRUE 1
#define FALSE 0


typedef int SElemType;
typedef int Status;


typedef struct 
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}Sqstack;


Status InitStack(Sqstack *s)
{
    s->base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType));
    if (!s->base) return OVERFLOW;
    s->top =s->base;
    s->stacksize = MAXSIZE;
}

//判断栈是否为空
Status StackEmpty(Sqstack S)
{
    if(S.base == S.top) return TRUE;
    else return FALSE;
}

//求顺序栈的长度
Status StackLength(Sqstack S)
{
    return S.top-S.base;
}

//清空栈
Status ClearStack(Sqstack S)
{
    if(S.base) S.top = S.base;
    return OK; 
}

//销毁一段内存
Status DestoryStack(Sqstack *S)
{
    if(S->base)
    {
        S->stacksize = 0;   //数组回归内存
        S->base =S->top =NULL;  //销毁指针
    }
    return OK;
}


//入栈
Status Push(Sqstack *S,SElemType e)
{
    if(S->top-S->base == S->stacksize ) return OVERFLOW;
    *(S->top) = e;
    S->top++;
    return OK;
}
//出栈
Status Pop(Sqstack *S,SElemType *e)
{
    if(S->top == S->base) return OVERFLOW;
    S->top -=1;
    *e = *(S->top);
    return OK;
}

void Print_PL(Sqstack S)
{
    SElemType *e= S.base;
    while(e != S.top)
    {
        printf("%d\t",*e);
        e++;
    }
}

int main()
{
    Sqstack s;
    InitStack(&s);
    int e,f;
    printf("输入长度");
    scanf("%d",&e);

    for(int i=0;i<e;i++)
    {
        printf("输入个数字");
        scanf("%d",&f);
        Push(&s,f);
    }
    Print_PL(s);
    Pop(&s,&e);
    printf("%d\n",e);
    Print_PL(s);
    return 0;
}

顺序栈的基本实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值