• <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>

            我心飛翔

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

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              1 隨筆 :: 9 文章 :: 13 評論 :: 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.數制轉換:

            將一個十進制轉換成八,十六進制數。

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

             #include"c1.h"

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

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

             

             /*void conversion()

             { // 對于輸入的任意一個非負10進制整數,打印輸出與其等值的16進制數

               SqStack s;

               unsigned n; // 非負整數

               SElemType e;

               InitStack(s); // 初始化棧

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

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

               while(n) // n不等于0

               {

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

                 n=n/16;

               }

               while(!StackEmpty(s)) // 當棧不空

               {

                 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.括號配對的檢驗:

            typedef char SElemType;

            #include"c1.h"

            #include"c2.cpp"

             

            void matching()

            {

              Sqstack S;

              InitStack(S);

              char *p,a[100],e;

              int state;

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

              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("輸入的括號相符合!");

              else

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

            }

             

            /*void check()

             { // 對于輸入的任意一個字符串,檢驗括號是否配對

               Sqstack s;

               SElemType ch[80],*p,e;

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

               {

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

                 gets(ch);

                 p=ch;

                 while(*p) // 沒到串尾

                   switch(*p)

                   {

                     case '(':

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

                              break; // 左括號入棧,且p++

                     case ')':

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

                              {

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

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

                                {

                                  printf("左右括號不配對\n");

                                  exit(ERROR);

                                }

                                else

                                {

                                  p++;

                                  break; // 跳出switch語句

                                }

                              }

                              else // ???/SPAN>

                              {

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

                                exit(ERROR);

                              }

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

                   }

                 if(StackEmpty(s)) // 字符串結束時???/SPAN>

                   printf("括號匹配\n");

                 else

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

               }

             }*/

             

            void main()

            {

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

                   matching();

               //check();

            }

            posted on 2005-10-14 00:05 無情雨 閱讀(1667) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構

            評論

            # re: 棧的實現與表示,以及數制轉換,符號配對的問題 [未登錄] 2008-10-05 10:58 初學者
            符號配對的問題 “缺乏左括號的部分”若缺乏左括號,輸出時輸出兩個語句“缺乏左括號”和“括號匹配”,請解決……  回復  更多評論
              

            # re: 棧的實現與表示,以及數制轉換,符號配對的問題 2013-11-15 10:09
            這個代碼的運行環境是哪個呀,我在visual c++里面有莫多錯誤,求解???  回復  更多評論
              

            亚洲国产成人久久一区WWW| 久久久久99精品成人片三人毛片 | 亚洲精品乱码久久久久久蜜桃图片| 99久久夜色精品国产网站| 91精品观看91久久久久久| 99久久精品免费观看国产| 久久伊人中文无码| 少妇内射兰兰久久| 成人国内精品久久久久影院VR| 国内精品久久久久久中文字幕| 香蕉久久永久视频| 东京热TOKYO综合久久精品| 26uuu久久五月天| 国产激情久久久久久熟女老人| 国内精品人妻无码久久久影院 | 麻豆亚洲AV永久无码精品久久| 国产麻豆精品久久一二三| 久久人人爽人人爽AV片| 亚洲AV无码久久精品色欲| 精品久久综合1区2区3区激情| 国产欧美久久久精品影院| 99久久这里只有精品| 久久影院久久香蕉国产线看观看| 日产精品久久久久久久性色| 精品久久人人做人人爽综合| 久久99精品久久久久久久不卡| 久久久久人妻一区精品果冻| 久久er国产精品免费观看2| 久久久久久精品免费免费自慰| 国产精品久久久99| 精品无码久久久久久午夜| 亚洲国产成人精品女人久久久| 国产成人精品久久一区二区三区av| 亚洲国产一成人久久精品| 久久亚洲日韩看片无码| 久久人人爽人人澡人人高潮AV | 久久婷婷五月综合国产尤物app | 性高朝久久久久久久久久| 久久精品不卡| 久久久久久久综合日本| 久久久久久毛片免费看|