栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。
/* 定义链栈 */
typedef struct SNode * Stack;
struct SNode{
ElementType Data;
struct SNode *Next;
};
/* 堆栈初始化、建立空栈 */
Stack CreateStack()
{
/* 建立一个堆栈的头节点,返回指针 */
Stack S;
S = (Stack)malloc(sizeof(struct SNode));
S->Next=NULL;
return S;
}
/* 判断栈是否为空 */
int IsEmpty(Stack S)
{
/* 空返回1,否则返回0 */
return(S->Next == NULL);
}
/* Push 入栈 元素item压入堆栈S */
void Push(ElementType item,Stack S)
{
struct SNode * TmpCell;
TmpCell=(struct SNode * )malloc(sizeof(struct SNode));
TmpCell->Element =item;
TmpCell->Next=S->Next;
S->next=TmpCell;
}
/*Pop 出栈 删除并返回堆栈S的栈顶元素*/
ElementType Pop(Stack S)
{
struct SNode * FirstCell; //指向栈顶元素
ElementType TopElem; //栈顶元素
if(IsEmpty(S)){
printf("the Stack empty"); return NULL;
}else{
FirstCell = S->Next;
S->Next = FirstCell->Next;
TopElem=FirstCell->Element;
free(FirstCell);
return TopElem;
}
}
网友评论