首页 > 代码库 > 栈初始化,入栈,出栈功能的实现

栈初始化,入栈,出栈功能的实现

  1 //////////////////////////////////////////////////////////  2 // stack.cpp  3 //  4 // author:Leetao  5 //////////////////////////////////////////////////////////  6 // 简介:  7 //   线性表的实现  8 //////////////////////////////////////////////////////////   9 /** 10 * 栈初始化,入栈,出栈功能的实现 11 * 12 * @author Leetao 13 * @version 1.0 14 * @date 2014.11.22   15 */  16 #include<stdio.h> 17 #include<malloc.h> 18  19 #define STACK_INIT_SIZE 100  //储存空间初试分配量  20 #define STACKINCREMENT 10   //储存空间分配增量  21  22 //类型宏定义,此处定义为int型  23 typedef  int SElem; 24 typedef  int Status; 25  26 typedef struct 27 { 28     SElem *base;  //在栈构造之前和销毁之后,base的值为NULL  29     SElem *top;   //栈顶指针 30     int stacksize; 31 }SqStack; 32  33 //函数声明 34 Status InitStack(SqStack &S); 35 Status GetTop(SqStack &S,SElem &e); 36 Status Push(SqStack &S,SElem e); 37 Status Pop(SqStack &S,SElem &e); 38   39 //栈初始化  40 Status InitStack(SqStack &S) 41 { 42     S.base=(SElem *)malloc(STACK_INIT_SIZE*sizeof(SElem)); 43     if(S.base==NULL) 44     { 45         printf("error!\n"); 46         return 0; 47     }     48     S.top=S.base; 49     S.stacksize=STACK_INIT_SIZE; 50      51     return 0; 52 } 53  54 //返回栈顶元素  55 Status GetTop(SqStack &S,SElem &e) 56 { 57     if(S.base==S.top) 58     { 59         printf("the stack is null!\n"); 60         return  0; 61     } 62      63     e=*(S.top-1); 64      65     return 0;  66 } 67  68 //插入元素 69 Status Push(SqStack &S,SElem e) 70 { 71     if(S.top-S.base>=S.stacksize)  //栈满,追加储存空间  72     { 73         S.base=(SElem *)realloc(S.base, 74         (S.stacksize+STACKINCREMENT)*sizeof(SElem)); 75          76         if(S.base==NULL) 77         { 78             printf("error!\n"); 79             return 0; 80         } 81          82         S.top=S.base+S.stacksize; 83         S.stacksize+=STACKINCREMENT; 84     } 85     *S.top++=e; 86      87      88     return 0; 89 }  90  91 //删除栈顶元素 92 Status Pop(SqStack &S,SElem &e) 93 { 94     if(S.top==S.base) 95     { 96         printf("error!\n"); 97         return 0; 98     }     99     e=*(--S.top);100     101     return 0;102 } 103 104 int main() 105 {106     SqStack S;107     int n,e;108         InitStack(S);109         printf("输入一个非负的十进制数,打印与其等值的八进制数:\n");110         scanf("%d",&n);111         112         while(n)113         {114             Push(S,n%8);115             n=n/8;116         }117         118         printf("最后转换结果为:\n");119         while(S.top!=S.base)120         {121             Pop(S,e);122             printf("%d",e);123         }124         125     126     return 0;127     128 }

栈初始化,入栈,出栈

栈初始化,入栈,出栈功能的实现