《大话数据结构》第四章 栈与队列

ADT 栈
Operation:
InitStack(*S);
DestroyStack(*S);
ClearStack(*S);
StackEmpty(S);
GetTop(S,*e);
Push(*S,e);
Pop(*S,*e);
StackLength(S);


栈的结构定义

typedef int SElemType;

typedef struct{
    SElemType data[MaxSize];
    int top;
}SqStack;

进栈操作

Status Push(SqStack *S, SElemType e)
{
    if(S->top==MaxSize-1)
        return ERROR;

    S->data[++S->top]=e;
    return OK;
} 

出栈操作

Status Pop(SqStack *S, SElemType *e)
{
    if(S->top==-1)
        return ERROR;

    *e=S->data[S->top--];
    return OK;  
} 

两栈共享空间
结构定义

typedef int SElmeType;

typedef struct{
    SElemType data[MaxSize];
    int top1;
    int top2;
}SqDoubleStack;

进栈
这里写图片描述

Status Push(SqDoubleStack *S, SElemType e, int StackNumber){
    if(S->top1+1==S->top2)
        return ERROR;

    if(StackNumber==1)
        S->data[++S->top1]=e;
    else if(StackNumber==2)
        S->data[--S->top2]=e;

    return OK;
} 

出栈

Status Pop(SqDoubleStack *S, SElemType *e, int StackNumber){
    if(StackNumber==1){
        if(S->top1==-1) return ERROR;
        *e=S->data[S->top1--];
    }

    if(StackNumber==2){
        if(S->top1==MaxSize)    return ERROR;
        *e=S->data[S->top2++];
    }
    return OK;
}

栈的链式存储结构
结构代码
这里写图片描述
栈链不需要头结点

typedef struct StackNode{
    SElemType data;
    struct StackNode *next;
}StackNode, *LinkStackPtr;

typedef struct LinkStack{
    int count;
    LinkStackPtr top;
}LinkStack;

进栈

Status Push(LinkStack *S, SElemType e){
    LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
    s->data=e;
    s->next=S->top;
    S->count++;
    S->top=s;
    return OK;
} 

出栈

Status Pop(LinkStack *S, SElemType *e){
    if(StackEmpty(S))
        return ERROR;

    LinkStackPtr p;
    *e=S->top->data;
    p=S->top;
    S->top=p->next;
    free(p);
    S->count--;

    return OK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值