浙大数据结构MOOC——堆栈链表注释

typedef struct SNode *PtrToSNode;       //PtrToSNode <变量名>      即相当于创建一个指向SNode结构类型的指针
struct SNode {              //堆栈结构体
    ElementType Data;       //堆栈数据
    PtrToSNode Next;            //下一项地址
};
typedef PtrToSNode Stack;       //Stack <变量名>       即相当于创建SNode结构类型的变量

Stack CreateStack( ) 
{ /* 构建一个堆栈的头结点,返回该结点指针 */
    Stack S;        //声明SNode结构体类型指针

    S = (Stack)malloc(sizeof(struct SNode));        //分配空间并将地址给S指针
    S->Next = NULL;         //堆栈最底部项的下一项为NULL
    return S;
}

bool IsEmpty ( Stack S )
{ /* 判断堆栈S是否为空,若是返回true;否则返回false */
    return ( S->Next == NULL );
}

bool Push( Stack S, ElementType X )
{ /* 将元素X压入堆栈S */
    PtrToSNode TmpCell;     //声明SNode结构体类型指针

    TmpCell = (PtrToSNode)malloc(sizeof(struct SNode));//分配空间并将地址给TmpCell指针
    TmpCell->Data = X;      //写入数据
    TmpCell->Next = S->Next;    //S作为头指针不存储数据并永远处于栈顶,所以将头指针Next项地址给TmpCell的Next项
    S->Next = TmpCell;          //头指针指向TmpCell
    return true;
}

ElementType Pop( Stack S )  
{ /* 删除并返回堆栈S的栈顶元素 */
    PtrToSNode FirstCell;
    ElementType TopElem;

    if( IsEmpty(S) ) {
        printf("堆栈空"); 
        return ERROR;
    }
    else {
        FirstCell = S->Next;                //栈顶指针Next项地址赋值给FirstCell(即堆栈第一项地址)
        TopElem = FirstCell->Data;  //栈顶元素值赋值给TopElem
        S->Next = FirstCell->Next;  //栈顶指针指向堆栈第一项的Next地址(即堆栈第二项)
        free(FirstCell);            //释放原第一项空间
        return TopElem;     //返回原第一项数值
    }
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值