zoukankan      html  css  js  c++  java
  • 前面我们讲到了容器,今天我们接着讨论另外一种数据结构:
    堆栈。堆栈几乎是程序设计的命脉,没有堆栈就没有函数调用,当然也就没有软件设计。

    那么堆栈有什么特殊的属性呢?其实,堆栈的属性主要表现在下面两个方面:

    1)堆栈的数据是先入后出

    2)堆栈的长度取决于栈顶的高度

    那么,作为连续内存类型的堆栈应该怎么设计呢?大家可以自己先试一下:

    #ifndef _stack_h
    #define _stack_h


    #include
    <stdio.h>
    #include
    <stdlib.h>
    #define EMPTYSTACK -1
    #define MINSTACKSIZE 5


    typedef
    struct stackRecord
    {
        
    int
    capacity;
        
    int
    topOfStack;
        
    void **
    array;
    }
    *
    stack;
    //stack s ==> struct stackRecord * s;
    int
    isEmpty(stack s);
    int
    isFull(stack s);

    stack createStack(int maxElementsNumber);
    void
    disposeStack(stack s);
    int push(void *
    e, stack s);
    void *
    top_element(stack s);
    int
    pop(stack s);
    void *
    topAndPop(stack s);
    int
    getStackLength(stack s);

    #endif

    #include "stack.h"

    int main(int argv, char *
    argc[])
    {
         stack s;
         s
    = createStack(5
    );
         push((
    void *)5
    , s);
         printf(
    "The Stack's length is %d "
    , getStackLength(s));

         push((
    void *)6
    , s);
         printf(
    "The Stack's length is %d "
    , getStackLength(s));

         printf(
    "The top element is %d ", (int
    )top_element(s));
         pop(s);

         printf(
    "The Stack's length is %d "
    , getStackLength(s));
         pop(s);
       
    //
    pop(s);
       
    // disposeStack(s);
         pop(s);
         push((
    void*)8
    ,s);
         printf(
    "The top element is %d ", (int
    )top_element(s));
        
    return 0
    ;
    }

    int
    isEmpty(stack s)
    {
      return s->topOfStack ==
    EMPTYSTACK;
    }

    int
    isFull(stack s)
    {
      return (s->topOfStack + 1) == s->
    capacity;
    }
    void
    disposeStack(stack s)
    {
        s
    ->topOfStack = -1
    ;

       
    if (s !=
    NULL) {
            free(
    *s->
    array);
           
    *s->array =
    NULL;
            free(s
    ->
    array);
            s
    ->array =
    NULL;
      
    //   free(s);
        }
    }

    stack createStack(
    int
    maxElements)
    {
        stack s
    = (stack)malloc(sizeof(struct
    stackRecord));

       
    if (maxElements <
    MINSTACKSIZE)
            perror(
    "Stack size is too small."
    );
       
    if (s ==
    NULL)
            perror(
    "Out of space!"
    );

        s
    ->array = (void **)malloc(sizeof(void *) *
    maxElements);
        s
    ->capacity =
    maxElements;
        s
    ->topOfStack = -1
    ;

       
    return
    s;
    }

    int push(void *
    e, stack s)
    {
       
    if (!
    isFull(s))
        {
            s
    ->array[++s->topOfStack] =
    e;
           
    return 0
    ;
        }
       
    else
            return 1
    ;
    }

    /* when the stack is empty it'll return 0 */
    void *
    top_element(stack s)
    {
          if (!
    isEmpty(s))
                
    return s->array[s->
    topOfStack];
          
    else
                return
    NULL;
    }

    int
    pop(stack s)
    {
       
    if (!
    isEmpty(s))
        {
            s
    ->array[s->topOfStack--] = ''
    ;
           
    return 0
    ;
        }
       
    else

        {
            printf(
    "it is empty ! ");
           
    return 1
    ;
        }
    }

    void *
    topAndPop(stack s)
    {
       
    void *
    e;
         e
    =
    top_element(s);
         pop(s);
         
    return
    e;
    }
    int
    getStackLength(stack s)
    {
      return (s->topOfStack+1
    ) ;
    }

  • 相关阅读:
    超级干货;Python优化之使用pandas读取和训练千万级数据
    「git」mac下git提交github代码
    「Linux+Django」uwsgi服务启动(start)停止(stop)重新装载(reload)
    「Linux+Django」Django+CentOs7+uwsgi+nginx部署网站记录
    「Linux」centos7安装mysql
    「Linux」centos7安装使用rar
    「Linux」centos7安装uWSGI
    「Linux」centos7更新python3.6后yum报错问题
    「Linux」centos7安装python
    「Linux」VMware安装centos7(一)
  • 原文地址:https://www.cnblogs.com/chengliangsheng/p/3597084.html
Copyright © 2011-2022 走看看