• <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 評論 :: 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)換:

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

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

             #include"c1.h"

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

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

             

             /*void conversion()

             { // 對于輸入的任意一個非負(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.括號配對的檢驗:

            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("請輸入表達(dá)式\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 // 棧空

                              {

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

                                exit(ERROR);

                              }

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

                   }

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

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

                 else

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

               }

             }*/

             

            void main()

            {

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

                   matching();

               //check();

            }

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

            評論

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

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

            色综合久久最新中文字幕| 久久人人青草97香蕉| 精品无码久久久久久国产| 精品国产综合区久久久久久| 三级片免费观看久久| 午夜人妻久久久久久久久| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲精品乱码久久久久久蜜桃| 久久久久av无码免费网| 大蕉久久伊人中文字幕| 亚洲中文久久精品无码ww16| 国产精品免费久久| 精品少妇人妻av无码久久| 久久国产高清一区二区三区| 99久久精品国产高清一区二区 | 久久精品桃花综合| 久久国产乱子精品免费女| 亚洲精品乱码久久久久久蜜桃图片| 久久亚洲国产欧洲精品一 | 日本国产精品久久| 91精品国产91久久久久久蜜臀 | 久久男人中文字幕资源站| 99re久久精品国产首页2020| 无码精品久久久天天影视 | 国产精品久久久久久| 国产69精品久久久久9999APGF | 无码8090精品久久一区| 国产精品成人99久久久久 | 国内精品久久人妻互换| 亚洲va久久久噜噜噜久久男同| 欧美激情精品久久久久久久九九九 | 国产一区二区精品久久凹凸 | 欧美日韩久久中文字幕| 久久久噜噜噜久久| 久久久久无码精品国产app| 国产精品丝袜久久久久久不卡| 久久亚洲国产精品一区二区| 国产亚洲婷婷香蕉久久精品| 精品久久久久久国产| 久久久精品免费国产四虎| 色综合久久久久网|