zoukankan      html  css  js  c++  java
  •   1 //顺序栈
      2 //1、 顺序栈的类型定义
      3   #define StackSize 100 //假定预分配的栈空间最多为100个元素
      4   typedef char DataType;//假定栈元素的数据类型为字符
      5   typedef struct{
      6       DataType data[StackSize];
      7       int top;
      8      }SeqStack; 
      9 //顺序栈的基本运算
     10 //(1) 置栈空
     11   void InitStack(SeqStack *S)
     12     {//将顺序栈置空
     13         S->top=-1;
     14     } 
     15 
     16 //(2) 判栈空
     17   int StackEmpty(SeqStack *S)
     18     {
     19         return S->top==-1;
     20     }
     21 
     22 //(3) 判栈满
     23   int StackFull(SeqStack *SS)
     24      {
     25        return S->top==StackSize-1;
     26      }
     27 
     28 //(4) 进栈
     29   void Push(S,x)
     30      {
     31        if (StackFull(S))
     32              Error("Stack overflow"); //上溢,退出运行
     33        S->data[++S->top]=x;//栈顶指针加1后将x入栈
     34      }
     35 
     36 //(5) 退栈
     37   DataType Pop(S)
     38     {
     39       if(StackEmpty(S))
     40            Error("Stack underflow"); //下溢,退出运行
     41       return S->data[S->top--];//栈顶元素返回后将栈顶指针减1
     42     }
     43 
     44 //(6) 取栈顶元素
     45   DataType StackTop(S)
     46     {
     47        if(StackEmpty(S))
     48            Error("Stack is empty");
     49        return S->data[S->top];
     50      }
     51 //链栈 
     52 //链栈的类型说明如下:
     53 
     54        typedef struct stacknode{
     55             DataType data
     56             struct stacknode *next
     57        }StackNode;
     58      
     59        typedef struct{
     60              StackNode *top;  //栈顶指针
     61        }LinkStack;
     62 
     63 //(1) 置栈空
     64       Void InitStack(LinkStack *S)
     65       {
     66              S->top=NULL;
     67       }
     68 //(2) 判栈空
     69       int StackEmpty(LinkStack *S)
     70       {
     71             return S->top==NULL;
     72       }
     73 
     74 //(3) 进栈
     75       void Push(LinkStack *S,DataType x)
     76       {//将元素x插入链栈头部
     77             StackNode *p=(StackNode *)malloc(sizeof(StackNode));
     78             p->data=x;
     79             p->next=S->top;//将新结点*p插入链栈头部
     80             S->top=p;
     81        }
     82 //(4) 退栈
     83       DataType Pop(LinkStack *S)
     84       {
     85             DataType x;
     86             StackNode *p=S->top;//保存栈顶指针
     87             if(StackEmpty(S))
     88                   Error("Stack underflow.");  //下溢
     89             x=p->data;  //保存栈顶结点数据
     90             S->top=p->next;  //将栈顶结点从链上摘下
     91             free(p);
     92             return x;
     93        }
     94 //(5) 取栈顶元素
     95       DataType StackTop(LinkStack *S)
     96        {
     97             if(StackEmpty(S))
     98                  Error("Stack is empty.")
     99              return S->top->data;
    100         }
    101 //栈的应用实例
    102 //1、数制转换
    103   //   将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题,很容//易通过"除B取余法"来解决。
    104  // 【例】将十进制数13转化为二进制数。
    105 /*     解答:按除2取余法,得到的余数依次是1、0、1、1,则十进制数转化为二进制数为1101。
    106      分析:由于最先得到的余数是转化结果的最低位,最后得到的余数是转化结果的最高位,因此很容易用栈来解决。
    107 
    108      转换算法如下:*/
    109 
    110           typedef int DataType;//应将顺序栈的DataType定义改为整型
    111           void MultiBaseOutput (int N,int B)
    112           {//假设N是非负的十进制整数,输出等值的B进制数
    113               int i;
    114               SeqStack S;
    115               InitStack(&S);
    116               while(N){  //从右向左产生B进制的各位数字,并将其进栈
    117                     push(&S,N%B); //将bi进栈0<=i<=j
    118                     N=N/B;
    119               }
    120               while(!StackEmpty(&S)){  //栈非空时退栈输出
    121                      i=Pop(&S);
    122                      printf("%d",i);
    123               }
    124             }
  • 相关阅读:
    ES6中变量的解析赋值的用途
    ES6中的Set与Map数据结构
    cocos2d-js 序列帧动画
    cocos2d-x坐标系详解
    【javascript】函数中的this的四种绑定形式
    ECMAScript 定义类、对象
    JS中函数参数值传递和引用传递
    作用域
    List<Map>如何根据Map的特定key对应的value对List排序?
    SQL字符型字段按数字型字段排序实现方法
  • 原文地址:https://www.cnblogs.com/cancangood/p/3344306.html
Copyright © 2011-2022 走看看