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

来源:互联网 发布:鱼眼校正算法 opencv 编辑:程序博客网 时间:2024/05/17 09:39
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;     //返回原第一项数值    }}
0 0