您的位置:首页 > 理论基础 > 数据结构算法

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

2017-03-13 20:53 260 查看
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;     //返回原第一项数值
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: