<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一江春水向東流

    做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks

    /****************a simple stack**********************************/

    #include <stdio.h>

    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT? 10
    typedef int bool;
    #define TRUE?? 1
    #define FALSE? 0
    typedef struct
    {
    ?char *base;
    ?char *top;
    ?int stacksize;
    }sqStack;

    //=======================function protoType=============================
    bool InitStack(sqStack *stk);
    bool DestroyStack(sqStack *stk);
    bool ClearStack(sqStack *stk);
    bool StackEmpty(sqStack stk);
    int? StackLength(sqStack stk);
    bool GetTop(sqStack stk, char *item);
    bool Push(sqStack *s, char item);
    bool Pop(sqStack *s, char *item);

    bool InitStack(sqStack *stk)
    {
    ?stk->base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
    ?if (!stk->base)
    ?return FALSE;
    ?stk->top = stk->base;
    ?stk->stacksize = STACK_INIT_SIZE;
    ?return TRUE;
    }

    bool GetTop(sqStack stk, char *item)
    {
    ?if (stk.top == stk.base)
    ?return FALSE;
    ?item = (stk.top-1);
    ?return TRUE;
    }

    bool Push(sqStack *stk, char item)
    {
    ?if (stk->top - stk->base >= stk->stacksize)
    ?{
    ??printf("allocate New Mem\n");
    ??stk->base = (char *)realloc(stk->base, (stk->stacksize + STACKINCREMENT)* sizeof(char));
    ??if (!stk->base)
    ??return FALSE;
    ??stk->top = stk->base + stk->stacksize;
    ??stk->stacksize += STACKINCREMENT;
    ?}
    ?*stk->top = item;
    ?stk->top++;
    ?return TRUE;
    }

    bool Pop(sqStack *stk, char* item)
    {
    ?if (stk->top == stk->base)
    ?return FALSE;
    ?stk->top--;
    ?*item = *(stk->top);
    ?return TRUE;
    }

    bool StackEmpty(sqStack stk)
    {
    ?if (stk.top == stk.base)
    ?return TRUE;
    ?else
    ?return FALSE;
    }

    bool ClearStack(sqStack *stk)
    {
    ?stk->top = stk->base;
    ?memset(stk->base, 0, sizeof(char));
    ?if (stk->top)
    ?return TRUE;
    ?else
    ?return FALSE;
    }
    bool DestroyStack(sqStack *stk)
    {
    ?free(stk->base);
    ?printf("free memery\n");
    ?return TRUE;
    }????

    int main(int argc, char** argv)
    {
    ?sqStack stk;
    ?char ch;
    ?InitStack(&stk);
    ?ch = getchar();
    ?while(ch != EOF)
    ?{
    ??while(ch != EOF && ch != '\n')
    ??{
    ???switch (ch)
    ???{
    ????? case '#':
    ????Pop(&stk, &ch);
    ????break;
    ????? case '@':
    ????? ?ClearStack(&stk);
    ????? ?break;
    ????? case 'q':???????
    ??????? DestroyStack(&stk);
    ??????? exit(1);
    ??????? break;???????
    ????? default:
    ?????? Push(&stk, ch);
    ???}
    ???ch = getchar();
    ??}
    ??ClearStack(&stk);
    ??if (ch != EOF)
    ??ch = getchar();
    ?}
    ?DestroyStack(&stk);?
    ?return 1;
    }

    特別要注意的是堆棧的中操作棧頂的值,在就是對內存的操作

    posted on 2007-11-13 22:00 allic 閱讀(505) 評論(0)  編輯  收藏 所屬分類: 算法及數據結構
    主站蜘蛛池模板: 国产高清在线免费视频| 最近国语视频在线观看免费播放 | 亚洲免费综合色在线视频| 亚洲AV午夜福利精品一区二区| 中文字幕无码免费久久9一区9| 久久精品国产亚洲Aⅴ香蕉| 午夜免费国产体验区免费的| 又黄又爽无遮挡免费视频| 精品一区二区三区免费毛片| 免费看国产一级片| 一区二区三区在线免费观看视频| 国产亚洲成归v人片在线观看 | 亚洲一级黄色大片| 成人毛片18女人毛片免费| 亚洲人成电影网站色www| 日本特黄特色aa大片免费| 欧洲亚洲综合一区二区三区| 亚洲最大av无码网址| 曰批全过程免费视频在线观看无码 | 久久精品亚洲福利| 久久青草免费91线频观看不卡| 亚洲狠狠综合久久| 猫咪社区免费资源在线观看| 国产亚洲精品成人久久网站 | 亚洲精品成人在线| 黄页免费在线观看 | 亚洲av无码偷拍在线观看| 亚洲精品国产高清嫩草影院 | 69成人免费视频| 亚洲AV日韩AV一区二区三曲| 久久精品亚洲男人的天堂| 6080午夜一级毛片免费看6080夜福利| 亚洲午夜久久久久久尤物| 国产大片51精品免费观看| 久久免费精品一区二区| 亚洲色大成网站www永久网站| 久久久久亚洲AV综合波多野结衣| 日本在线看片免费人成视频1000| 亚洲综合激情五月色一区| 亚洲中文字幕伊人久久无码| 最近免费字幕中文大全视频|