链栈-----栈的链式存储结构及其实现-创新互联

栈通过数组来实现的方式其实就是采用的是线性表的顺序存储结构,而通过链式存储结构实现的栈操作,简称为”链栈“。既然是通过链式存储,那么肯定是像单链表那样,是通过一个个结点来构成的。既然是结点,必不可少的,需要一个存放数据的变量,一个存放后继指针的变量。这是对结点的定义,还有就是栈本身的定义,由于栈是在顶部进行元素的插入或删除操作,所以,需要一个栈顶指针,因为是链栈,还需要一个计数变量,用来存放元素个数的。那么,链栈的结构定义如下:

公司主营业务:成都做网站、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出齐河免费做网站回馈大家。
typedef struct StackNode{

    ElemType data;
    struct StackNode *next;
}StackNode, *LinkStackPtr;

typedef struct LinkStack{

    LinkStackPtr top;
    int count;
}LinkStack;

  接下来就是元素的插入操作。链栈元素的插入跟单链表元素的插入非常类似。既然是链式存储,那么很明显的就是需要动态的分配存储空间。由于只能在栈顶进行元素的插入操作,所以,在data中存放数据后,后继指针next中存放的就是top指针中的值,因为top指向的是栈顶。然后,再将栈顶指针指向新的存储空间。具体实现代码如下:

Status Push ( LinkStack *S, SElemType e )
{
    LinkStackPtr s = ( LinkStackPtr ) malloc ( sizeof ( StackNode ) );
    s->data = e;
    s->next = S->top;
    S->top = s;
    S->count++;
    
    return OK;

}

  元素的删除操作与插入操作非常类似。删除一个元素只要将栈顶指针指向它的之前一个元素就行了,然后释放删除元素的空间。代码如下:

Status Pop ( LinkStack *S, SElemType *e )
{
    LinkStackPtr p;
    if ( StackEmpty ( *s ) )
        return ERROR;
        
    p = S->top;
    *e = S->data;
    S->top = S->top->next;
    free ( p );
    S->count--;
    
    return OK;

}

最后一段总结,摘自书本:

如果栈的使用过程中元素变化不可预料,有时很小,有时非常大。那么最好是用链栈,反之,如果它的变化是在可控范围内,建议使用顺序栈会更好些。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:链栈-----栈的链式存储结构及其实现-创新互联
URL标题:http://pwwzsj.com/article/digcgh.html