【栈】

【栈】

顺序栈

1.实现

typedef struct SNode *Stack;
struct SNode {
    ElementType Data[MaxSize];
    int Top; // 栈顶指针
};

2.创建空栈

Stack CreatStack()
{
    Stack PtrS;
    PtrS = (Stack)malloc(sizeof(struct SNode));
    PtrS -> Top = -1;
    return PtrS;
}

2.入栈

void Push(Stack PtrS,ElementType item)
{
    if(PtrS -> Top == MaxSize - 1)
        return; // 栈满
    else {
    	 PtrS -> Data[++ (Ptr -> Top)] = item;
        return;
    }
       
}

3.出栈

ElementType Pop(Stack PtrS)
{
    if(Ptr -> Top == -1) 
        return; // 栈空
    else
        return (PtrS -> Data[(PtrS -> Top) --]);
}

4.判空

int IsEmpty(Stack PtrS)
{
    if(S -> Top == -1)
        return 1; 
    else 
        return 0;
}

4.判满

int IsFull(Stack PtrS)
{
    if(S -> Top == MaxSize - 1)
        return 1; 
    else 
        return 0;
}
链栈
  • 栈顶元素就是第一个元素(头空结点的下一个)

1.实现

typedef struct SNode *Stack;
struct SNode {
    ElementType Data;
    Stack Next;
};

2.创建空栈

// 建立一个只有头空结点的空栈
Stack CreateStack()
{
    Stack S;
    S = (Stack)malloc(sizeof(struct SNode));
    S -> Next = NULL;
    return S;
}

3.入栈

void Push(ElementType item,Stack S)
{
    struct SNode *tmpNode;
    tmpNode = (struct Node *)malloc(sizeof(struct SNode));
    tmpNode -> Element = item;
    tmpNode -> Next = S -> Next;
    S -> Next = tmpNode;
}

4.出栈

ElementType Pop(Stack S)
{
    struct SNode *FirstNode;
    ElementType FirstEle;
    if(IsEmypty(S)) 
        return;
    else {
        FirstNode = S -> Next;
        S -> Next = FirstNode -> Next;
        FirstEle = FirstNode -> Data;
        free(FirstNode);
        return FirstEle;
    } 
}

5.判空

int IsEmpty(Stack S)
{
    return (S -> Next ==  NULL);
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百栗.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值