• 栈,是限定仅在表尾进行插入或删除操作的线性表。(栈就像一个杯子),,表头是栈底,表尾是栈顶。需要注意的是,栈是先进后出,后进先出。

     同样,和线性表类似,栈也有两种储存表示方法(这里就用顺序栈的模块说明)

     1 #include <stdlib.h>
     2 #include <stdio.h>
     3 
     4 /****** 宏定义 ******/
     5 #define ERROR 0
     6 #define OVERFLOW -2
     7 #define OK 1
     8 #define STACK_INIT_SIZE 100    //存储空间初始分配量
     9 #define STACKINCREMENT 10    //存储空间分配增量
    10 
    11 /******** 取别名 *********/
    12 typedef int SElemType;    //所需存的元素的类型
    13 typedef int Status;
    14 
    15 /******** 栈的定义 *******/
    16 typedef struct{
    17     SElemType *base;    //栈的基地址,也就是栈底指针
    18     SElemType *top;        //栈定指针
    19     int stacksize;        //当前已分配的储存空间,就是最大能存储的数量
    20 }SqStack;
    21 
    22 /********* 构建一个空栈 *******/
    23 Status InitStack(SqStack &S){
    24     S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));    //分配内存给S.base
    25     if (!S.base) exit(OVERFLOW);    //存储分配失败
    26     S.top = S.base;    //初始时,栈顶=栈底
    27     S.stacksize = STACK_INIT_SIZE;    //当前最大存储量就是初始分配量
    28     return OK;
    29 }
    30 
    31 /********** 用e返回栈顶元素 ********/
    32 Status GetTop(SqStack &S, SElemType &e){
    33     if (S.top == S.base)
    34         return ERROR;     //栈为空,ERROR
    35     e = *(S.top - 1);    //栈顶指针的下一位就是栈顶元素
    36     return OK;
    37 }
    38 
    39 /********** 插入e为新的栈顶元素 ******/
    40 Status Push(SqStack &S, SElemType e){
    41     if (S.top - S.base >= S.stacksize){    //栈满,增加空间
    42         S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
    43         if (!S.base)
    44             exit(OVERFLOW);
    45         S.top = S.base + S.stacksize;    //栈顶指针的位置在栈底向上移 S.stacksize 个
    46         S.stacksize += STACKINCREMENT;    //储存空间增大了  STACKINCREMENT 个
    47     }
    48     *S.top++ = e;    //栈顶指针的位置放值元素e, 然后上移一个
    49     return OK;
    50 }
    51 
    52 /********** 删除栈顶元素,并用e返回其值 ******/
    53 Status Pop(SqStack &S, SElemType &e){
    54     if (S.top == S.base)    //若为空
    55         return ERROR;    
    56     e = *--S.top;        //栈顶指针下移一个,并把值给e
    57     return OK;
    58 }
    59 
    60 int main(){
    61     //
    62     return 0;
    63 }
  • 相关阅读:
    [置顶] 一个懦弱的IT人
    Android ListView的理解(一)
    不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数
    http-使用get和post方式提交数据
    ILOG的一个基本应用——解决运输问题、转运问题
    原生js获取execl里面的值 主要使用ActiveXObject
    (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
    HDU 3032 Nim or not Nim? (sg函数)
    Hadoop入门实践之从WordCount程序说起
    仅复制备份(简单恢复模式)
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/7748058.html
Copyright © 2020-2023  润新知