• 堆栈的定义与操作——顺序存储和链式存储


      堆栈 的 存储结构 顺序存储链式存储

      1. 堆栈的顺序存储和操作

     1 typedef int Position;
     2 struct SNode {     
     3     ElementType *Data;    // 存储元素 的数组 
     4     Position Top;        // 栈顶 指针 
     5     int Cap;             // 堆栈最大容量 
     6 };
     7 typedef struct SNode *Stack;
     8 
     9 // 操作集
    10 Stack CreateStack(int MaxSize);
    11 void Push(Stack S, ElementType X);
    12 int IsEmpty(Stack S);
    13 int IsFull(Stack S);
    14 ElementType Pop(Stack S);
    15 
    16 Stack CreateStack(int MaxSize)
    17 {
    18     Stack S = (Stack)malloc(sizeof(struct SNode));
    19     S->Data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
    20     S->Top = -1;    S->Cap = MaxSize;
    21     
    22     return S;
    23 }
    24 
    25 int IsEmpty(Stack S)
    26 {
    27     return ( S->Top == -1 );
    28 }
    29 
    30 int IsFull(Stack S)
    31 {
    32     return ( S->Top == S->Cap-1 );
    33 }
    34 
    35 void Push(Stack S, ElementType X)
    36 {
    37     if ( IsFull(S) )    return;
    38     
    39     S->Data[++(S->Top)] = X;
    40 }
    41 
    42 ElementType Pop(Stack S)
    43 {
    44     if ( IsEmpty(S) ) return NULL;  // 这里的返回值应该视具体情况而定(可能返回 NULL,或者返回 ElementType 类型)
    45     
    46     return    S->Data[(S->Top)--];
    47 }

       2. 堆栈的链式存储和操作

     1 typedef struct SNode *PtrToNode;
     2 struct SNode {
     3     ElementType Data;
     4     PtrToNode Next;
     5 };
     6 typedef PtrToNode Stack;
     7 
     8 // 操作集
     9 Stack CreateStack();
    10 void Push(Stack S, ElementType X);
    11 int IsEmpty(Stack S);
    12 ElementType Pop(Stack S);
    13 
    14 Stack CreateStack()
    15 {    // 创建一个堆栈的头节点,返回该节点指针 
    16     Stack S = (Stack)malloc(sizeof(struct SNode));
    17     S->Next = NULL;
    18     
    19     return S;
    20 }
    21 
    22 int IsEmpty(Stack S)
    23 {
    24     return ( S->Next == NULL );
    25 }
    26 
    27 void Push(Stack S, ElementType X) 
    28 {
    29     PtrToNode TmpCell = (PtrToNode)malloc(sizeof(struct SNode));
    30     TmpCell->Data = X;
    31     TmpCell->Next = S->Next;
    32     S->Next = TmpCell;
    33 }
    34 
    35 ElementType Pop(Stack S)
    36 {
    37     if ( IsEmpty(S) )    return NULL; // 这里的返回值应该视具体情况而定(可能返回 NULL,或者返回 ElementType 类型)
    38     
    39     ElementType TopElem;
    40     PtrToNode FrontCell;
    41     
    42     FrontCell = S->Next;
    43     TopElem = FrontCell->Data;
    44     
    45     S->Next = FrontCell->Next;
    46     free(FrontCell);
    47     
    48     return TopElem;
    49     
    50 }

      

  • 相关阅读:
    【BZOJ-4592】脑洞治疗仪 线段树
    【BZOJ-1369】Gem 树形DP
    【BZOJ-3696】化合物 树形DP + 母函数(什么鬼)
    【BZOJ-2435】道路修建 (树形DP?)DFS
    【BZOJ-4590】自动刷题机 二分 + 判定
    【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
    【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
    【BZOJ-1324】Exca王者之剑 最小割
    【BZOJ-1017】魔兽地图DotR 树形DP + 背包
    【BZOJ-1131】Sta 树形DP
  • 原文地址:https://www.cnblogs.com/wgxi/p/9973919.html
Copyright © 2020-2023  润新知