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 }
栈初始化,入栈,出栈
时间: 2024-12-19 05:25:35