堆栈(Stack)---链表实现

2017-07-26  本文已影响0人  日常表白结衣

栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。

/* 定义链栈 */
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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读