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

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

     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 }
  • 相关阅读:
    SOUI更新到2.0
    第三十一篇:SOUI布局之相对于特定兄弟窗口
    SOUI与WTL
    在SOUI中非半透明窗口如何实现圆角窗口?
    拥抱ARM妹纸第二季 之 第一次 点亮太阳
    拥抱ARM妹子第二季 之 序:我和春天有个约会
    解决自定义控件窗体缩放时闪烁
    The 50 Most Essential Pieces of Classical Music
    嵌入式开发目录
    C中浮点数转字符串
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/7748058.html
Copyright © 2011-2022 走看看