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

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

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

    一江春水向東流

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      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;
    }

    特別要注意的是堆棧的中操作棧頂?shù)闹?,在就是對?nèi)存的操作

    posted on 2007-11-13 22:00 allic 閱讀(504) 評論(0)  編輯  收藏 所屬分類: 算法及數(shù)據(jù)結(jié)構(gòu)
    主站蜘蛛池模板: 最近的中文字幕大全免费版| 蜜桃视频在线观看免费视频网站WWW| 在线永久看片免费的视频| 亚洲VA中文字幕无码毛片| 在线免费视频你懂的| 在线亚洲人成电影网站色www| 久久精品成人免费观看97| 亚洲中文字幕无码不卡电影 | 77777亚洲午夜久久多喷| 国产大片线上免费观看| 亚洲熟妇无码一区二区三区| 四虎成人免费影院网址| 精品视频免费在线| 亚洲香蕉网久久综合影视| 爽爽日本在线视频免费| 亚洲久热无码av中文字幕| 国产三级在线免费| 久久亚洲春色中文字幕久久久 | 亚洲午夜精品第一区二区8050| 免费一级毛片在线播放放视频| 亚洲午夜精品一级在线播放放| 最新久久免费视频| 久久久久亚洲av无码专区喷水| 国产免费不卡视频| 精品亚洲国产成人av| 亚洲一级特黄大片在线观看 | 无遮免费网站在线入口| 亚洲乱亚洲乱妇24p| 亚洲裸男gv网站| 最近2019年免费中文字幕高清| 99999久久久久久亚洲| 中文字幕亚洲日韩无线码| 一级毛片免费视频| 亚洲一本到无码av中文字幕 | 国产yw855.c免费视频| 亚洲国产免费综合| 老司机亚洲精品影院无码| 日韩视频免费在线| 国产一区二区三区免费观看在线| 亚洲视频无码高清在线| 亚洲熟女少妇一区二区|