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; //返回原第一项数值
}
}
浙大数据结构MOOC——堆栈链表注释
最新推荐文章于 2022-11-10 10:39:05 发布