• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我心飛翔

            有事不慌,無事不荒,有容乃大,無欲則剛,以德立綱,外圓內(nèi)方。

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              1 隨筆 :: 9 文章 :: 13 評(píng)論 :: 0 Trackbacks

             

             

             

            以下是棧的一些基本操作:

            #define STACK_INIT_SIZE 10

            #define STACKINCREMENT 2

            typedef struct

            {

              SElemType *base;

              SElemType *top;

              int stacksize;

            } Sqstack;

             

            int InitStack(Sqstack &S)

            {

              if(!(S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))

                     exit(OVERFLOW);

              S.top=S.base;

              S.stacksize=STACK_INIT_SIZE;

              return OK;

            }

             

            int DestroyStack(Sqstack &S)

            {

              free(S.base);

              S.base=NULL;

              S.top=NULL;

              S.stacksize=0;

              return OK;

            }

             

            int ClearStack(Sqstack &S)

            {

              S.top=S.base;

              return OK;

            }

             

            int StackEmpty(Sqstack S)

            {

              if(S.top==S.base)

              return TRUE;

              else

              return FALSE;

            }

             

            int StackLength(Sqstack S)

            {

              return S.top-S.base;

            }

             

            int GetTop(Sqstack S,SElemType &e)

            {

              if(S.top>S.base)

              {

                e=*(S.top-1);

                return OK;

              }

              else

              return ERROR;

            }

             

            int Push(Sqstack &S,SElemType e)

            {

              if(S.top-S.base>=S.stacksize)

              {

                S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

                if(!S.base)

                exit(OVERFLOW);

                S.top=S.base+S.stacksize;

                S.stacksize+=STACKINCREMENT;

              }

              *(S.top)++=e;

              return OK;

            }

             

            int Pop(Sqstack &S,SElemType &e)

            {

              if(S.top==S.base)

              return FALSE;

              e=*--S.top;

              return OK;

            }

             

            int StackTraverse(Sqstack &S,SElemType (*visit)(SElemType))

            {

              while(S.top>S.base)

                visit(*S.base++);

                return OK;

            }

             

             

             

             

             

             

             

             

            1.?dāng)?shù)制轉(zhuǎn)換:

            將一個(gè)十進(jìn)制轉(zhuǎn)換成八,十六進(jìn)制數(shù)。

            typedef int SElemType; // 定義棧元素類型為整型

             #include"c1.h"

             //#include"c3-1.h" // 采用順序棧

             #include"c2.cpp" // 利用順序棧的基本操作

             

             /*void conversion()

             { // 對(duì)于輸入的任意一個(gè)非負(fù)10進(jìn)制整數(shù),打印輸出與其等值的16進(jìn)制數(shù)

               SqStack s;

               unsigned n; // 非負(fù)整數(shù)

               SElemType e;

               InitStack(s); // 初始化棧

               printf("n(>=0)=");

               scanf("%u",&n); // 輸入非負(fù)十進(jìn)制整數(shù)n

               while(n) // 當(dāng)n不等于0

               {

                 Push(s,n%16); // 入棧n除以16的余數(shù)(16進(jìn)制的低位)

                 n=n/16;

               }

               while(!StackEmpty(s)) // 當(dāng)棧不空

               {

                 Pop(s,e); // 彈出棧頂元素且賦值給e

                 if(e<=9)

                   printf("%d",e);

                 else

                   printf("%c",e+55);

               }

               printf("\n");

             }*/

             

             void conversion()

            {

              Sqstack S;

              unsigned N;

              SElemType e;

              InitStack(S);

              scanf("%u",&N);

              while(N)

              {

                Push(S,N%8);

                N=N/8;

              }

              while(!StackEmpty(S))

              {

                Pop(S,e);

                printf("%d",e);

              }

            }

             

             void main()

             {

               conversion();

             }

             

             

             

             

            2.括號(hào)配對(duì)的檢驗(yàn):

            typedef char SElemType;

            #include"c1.h"

            #include"c2.cpp"

             

            void matching()

            {

              Sqstack S;

              InitStack(S);

              char *p,a[100],e;

              int state;

              printf("請輸入一組符號(hào)(僅只能含有三種{},(),[]):");

              gets(a);

              p=a;

              state=1;

              while(*p && state)

              {

                     if(!(*p=='{' || *p=='}' || *p=='[' || *p==']' || *p=='(' || *p==')'))

                     {

                            printf("輸入不正確!");

                            exit(ERROR);

                     }

                switch (*p)

                   {

                   case '(':

                      case '{':

                   case '[':{

                      Push(S,*p++);

                         break;

                                        }

                   case ')':{

                            GetTop(S,e);

                      if(!StackEmpty(S) && e=='(')

                            {

                           Pop(S,e);

                                 p++;

                            }

                           else

                               state=0;

                         break;

                                        }

                   case ']':{

                             GetTop(S,e);

                      if(!StackEmpty(S) && e=='[')

                            {

                            Pop(S,e);

                               p++;

                            }

                         else

                            state=0;

                        break;

                                        }

                             case '}':{

                             GetTop(S,e);

                      if(!StackEmpty(S) && e=='{')

                            {

                            Pop(S,e);

                               p++;

                            }

                         else

                            state=0;

                        break;

                                        }

                   }

               

              }

              if(StackEmpty(S) && state)

                     printf("輸入的括號(hào)相符合!");

              else

                    printf("輸入的括號(hào)不符合!");

            }

             

            /*void check()

             { // 對(duì)于輸入的任意一個(gè)字符串,檢驗(yàn)括號(hào)是否配對(duì)

               Sqstack s;

               SElemType ch[80],*p,e;

               if(InitStack(s)) // 初始化棧成功

               {

                 printf("請輸入表達(dá)式\n");

                 gets(ch);

                 p=ch;

                 while(*p) // 沒到串尾

                   switch(*p)

                   {

                     case '(':

                     case '[':Push(s,*p++);

                              break; // 左括號(hào)入棧,且p++

                     case ')':

                     case ']':if(!StackEmpty(s)) // 棧不空

                              {

                                Pop(s,e); // 彈出棧頂元素

                                if(*p==')'&&e!='('||*p==']'&&e!='[') // 彈出的棧頂元素與*p不配對(duì)

                                {

                                  printf("左右括號(hào)不配對(duì)\n");

                                  exit(ERROR);

                                }

                                else

                                {

                                  p++;

                                  break; // 跳出switch語句

                                }

                              }

                              else // 棧空

                              {

                                printf("缺乏左括號(hào)\n");

                                exit(ERROR);

                              }

                     default: p++; // 其它字符不處理,指針向后移

                   }

                 if(StackEmpty(s)) // 字符串結(jié)束時(shí)棧空

                   printf("括號(hào)匹配\n");

                 else

                   printf("缺乏右括號(hào)\n");

               }

             }*/

             

            void main()

            {

                   //char a[]={[(]])]};

                   matching();

               //check();

            }

            posted on 2005-10-14 00:05 無情雨 閱讀(1671) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

            評(píng)論

            # re: 棧的實(shí)現(xiàn)與表示,以及數(shù)制轉(zhuǎn)換,符號(hào)配對(duì)的問題 [未登錄] 2008-10-05 10:58 初學(xué)者
            符號(hào)配對(duì)的問題 “缺乏左括號(hào)的部分”若缺乏左括號(hào),輸出時(shí)輸出兩個(gè)語句“缺乏左括號(hào)”和“括號(hào)匹配”,請解決……  回復(fù)  更多評(píng)論
              

            # re: 棧的實(shí)現(xiàn)與表示,以及數(shù)制轉(zhuǎn)換,符號(hào)配對(duì)的問題 2013-11-15 10:09
            這個(gè)代碼的運(yùn)行環(huán)境是哪個(gè)呀,我在visual c++里面有莫多錯(cuò)誤,求解???  回復(fù)  更多評(píng)論
              

            无码超乳爆乳中文字幕久久| 久久免费99精品国产自在现线| 色偷偷91久久综合噜噜噜噜| 久久久精品日本一区二区三区 | 99久久精品免费看国产免费| 久久99国产亚洲高清观看首页| 亚洲一区二区三区日本久久九| 国产精品青草久久久久福利99 | 亚洲成色www久久网站夜月| 色综合久久无码五十路人妻 | 国产精品99久久久久久www| 亚洲国产精品一区二区三区久久| 精品国产乱码久久久久软件| 久久久久人妻一区精品性色av| 久久亚洲欧洲国产综合| 色欲久久久天天天综合网| 精品久久久久久国产牛牛app| 久久国产色av免费看| 国产叼嘿久久精品久久| 久久夜色精品国产噜噜亚洲AV| 久久露脸国产精品| 国产精品免费久久| 国产精品免费福利久久| 久久99这里只有精品国产| 婷婷综合久久中文字幕| 国产午夜精品久久久久免费视| 2020久久精品亚洲热综合一本| 国产精品久久久99| 狠狠色丁香婷婷综合久久来| 久久国产亚洲精品无码| 精品国产99久久久久久麻豆| 日韩欧美亚洲综合久久影院Ds | 久久久久99精品成人片三人毛片 | 色老头网站久久网| 久久强奷乱码老熟女网站| 国产精品一久久香蕉国产线看| 亚洲精品无码久久一线| 精品国产乱码久久久久软件| 久久99精品国产麻豆宅宅| 久久这里都是精品| 精品久久久一二三区|