zoukankan      html  css  js  c++  java
  • 数据结构之堆栈

    1. 什么是堆栈

    堆栈(Stack):具有一定操作约束的线性表
    只在一端(栈顶,Top)做插入、删除
    插入数据:入栈(Push)
    删除数据:出栈(Pop)
    后入先出:Last In First Out(LIFO)

    2. 堆栈的抽象数据类型描述

    类型名称:堆栈(Stack)
    数据对象集:一个有 0 个或多个元素的有穷线性表
    操作集:长度为 MaxSize 的堆栈 S ∈ Stack,堆栈元素 item ∈ ElementType
     

    1. 栈的顺序存储实现

    ​ 栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成[相当于一个数组]
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define ElementType int
     4 #define  MAXSIZE 10
     5 typedef struct SNode* Stack;
     6 struct SNode
     7 {
     8     ElementType data[MAXSIZE];
     9     int Top;
    10 };
    11 //初始化
    12 Stack CreateStack()
    13 {
    14     Stack s = (Stack)malloc(sizeof(struct SNode));
    15     s->Top = -1;
    16     return s;
    17 }
    18 //入栈
    19 void Push(Stack s,ElementType item)    
    20 {
    21     //判断栈是否满
    22     if(s->Top == MAXSIZE -1 )
    23     {
    24         printf("该栈已满");
    25         return;
    26     }
    27     else
    28     {
    29         s->Top++;
    30         s->data[s->Top] = item;
    31     }
    32 }
    33 //出栈
    34 ElementType Pop(Stack s)
    35 {
    36     //判断栈是否空
    37     if (s->Top == -1)
    38     {
    39         printf("该栈已空");
    40         return;
    41     }
    42     else
    43     {
    44         s->Top--;
    45         return s->data[s->Top];
    46     }
    47 }
    View Code

    2. 栈的链式存储实现

    ​ 栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define ElementType int
     4 #define  MAXSIZE 10
     5 typedef struct SNode* Stack;
     6 struct SNode
     7 {
     8     struct SNode *next;
     9     ElementType data;
    10 };
    11 Stack CreateStack()
    12 {
    13     Stack  s = (Stack)malloc(sizeof(struct SNode));
    14     s->next = NULL;
    15     return s;
    16 }
    17 //判断堆栈是否为空
    18 int IsEmpty(Stack s)
    19 {
    20     return (s->next == NULL);
    21 }
    22 //入栈【放在后面】
    23 void Push(Stack s,ElementType item)
    24 {
    25     Stack temp = (Stack)malloc(sizeof(struct SNode));
    26     temp->data = item;
    27     temp->next = s->next;
    28     s->next = temp;
    29 }
    30 //出栈【删除头结点】
    31 ElementType Pop(Stack s)
    32 {
    33     Stack FirstCell;
    34     ElementType TopElem;
    35     if(IsEmpty(s))
    36     {
    37         printf("堆栈空");
    38         return NULL;
    39     }else
    40     {
    41         FirstCell = s->next;
    42         s->next = FirstCell->next;
    43         TopElem = FirstCell->data;
    44         free(FirstCell);
    45         return TopElem;
    46     }
    47 }
    View Code

  • 相关阅读:
    PHP获取当前服务器版本,Ip等详细信息
    Alipay 支付类
    php对接app支付宝支付出错Cannot redeclare Decrypt()
    Alipay支付宝支付 报错 invalid [default store dir]: /tmp/
    C# .net 高清压缩图片 合并图片方法
    csharp C#数字字符串排序orderby的问题解决
    tesseract 4.0 ocr图像识别利器,可识别文字。图片越高清越准确
    mysql update ...select的使用 & update 遇到 disable safe 的解决方法
    在Visual Studio 2013中安装Mysql for EntityFramework
    Mysql 中如何创建触发器
  • 原文地址:https://www.cnblogs.com/Yzengxin/p/13995642.html
Copyright © 2011-2022 走看看