美文网首页
堆栈(Stack)---链表实现

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

作者: 日常表白结衣 | 来源:发表于2017-07-26 23:33 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:堆栈(Stack)---链表实现

          本文链接:https://www.haomeiwen.com/subject/cwookxtx.html