【数据结构初学笔记03】堆栈的存储实现

01堆栈的顺序存储实现

包括存储实现,入栈、出栈

//01.存储实现
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
#define MaxSize 10
#define ERROR 0
typedef struct SNode *Stack;
struct SNode
{
    ElementType Data[MaxSize];
    int Top;
};

int main(void)
{
    return 0;
}
//02.入栈
void Push(Stack PtrS,ElementType item)
{
    if(PtrS->Top==MaxSize)
    {
        printf("堆栈满");
        return;
    }
    else
    {
        PtrS->Top++;
        PtrS->Data[PtrS->Top] = item;
        return;
    }
}
//03.出栈
ElementType Pop(Stack PtrS)
{
    if (PtrS->Top==-1)
    {
        printf("堆栈空");
        return ERROR;
    }
    else
    return(PtrS->Data[(PtrS->Top)--]);
}

02堆栈的链式存储实现

包括存储实现、堆栈初始化(带头结点链式结构堆栈)、判断堆栈为空、入栈、出栈。

注意:这里创建的是一个带头结点链式堆栈,还存在无头节点的形式

//01.存储实现
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
#define ERROR 0
typedef struct SNode *Stack;
struct SNode
{
    ElementType Data;
    Stack Next;
};
Stack CreateStack();
int IsEmpty(Stack S);

int main(void)
{
    Stack S;
    S = CreateStack();
    IsEmpty(S);
    return 0;
}
//堆栈初始化(建立空栈)
/*注意这里创建的是一个带头结点链式堆栈,还存在无头节点的形式*/
Stack CreateStack()
{
    Stack S;
    S = (Stack)malloc(sizeof(struct SNode));
    S->Next = NULL;
    return S;
}
//判断堆栈S是否为空,若为空返回整数1,否则返回0
int IsEmpty(Stack S)
{
    return (S->Next == NULL);
}
//02.入栈
void Push(Stack S,ElementType item)
{
    Stack TmpCell;
    TmpCell = (Stack)malloc(sizeof(struct SNode));
    TmpCell->Data = item;
    TmpCell->Next = S->Next;
    S->Next = TmpCell;
}
//03.出栈
ElementType Pop(Stack S)
{
    Stack FirstCell;
    ElementType TopElem;
    if (S->Next==NULL)
    {
        printf("堆栈空");
        return ERROR;
    }
    else
    {
        FirstCell = S->Next;
        S->Next = FirstCell->Next;
        TopElem = FirstCell->Data;
        free(FirstCell);
        return TopElem;
    }
}

结束

课程来源:浙江大学数据结构慕课MOOC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值