数据结构之栈

栈的概念:

栈,仅限定为表尾进行插入或删除操作的线性表。

栈顶——top

栈底——bottom


特性:

后进先出(last in first out)


用C/C++实现栈的算法:

#include <malloc.h> #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 #ifndef SElemType typedef int SElemType; #endif typedef struct{ SElemType *base;//栈底 SElemType *top;//栈顶 int stacksize;//栈的当前可使用的最大容量 }SqStack; //构造一个空栈 int InitStack(SqStack &stack); //销毁栈 int DestroyStack(SqStack &stack); int GetTop(SqStack &stack,SElemType &data); int Push(SqStack &stack,SElemType data); int Pop(SqStack &stack,SElemType &data); //插入data为栈顶元素 int Push(SqStack &stack,SElemType data); int InitStack(SqStack &stack) { stack.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!stack.base)return 0; stack.top = stack.base; stack.stacksize = STACK_INIT_SIZE; return 1; } int DestroyStack(SqStack &stack) { if(stack.top == stack.base)return 1; free(stack.base); stack.base = stack.top = NULL; } int GetTop(SqStack &stack,SElemType &data) { if(stack.top == stack.base)return 0; data = *(stack.top - 1); return 1; } int Push(SqStack &stack,SElemType data) { if((stack.top-stack.base) >= stack.stacksize)//满栈,添加存储空间 { /*realloc 内存扩大,并拷贝源内存数据*/ stack.base = (SElemType *)realloc(stack.base,(stack.stacksize+STACK_INCREMENT)*sizeof(SElemType)); if(!stack.base)return 0; stack.top = stack.base + stack.stacksize; stack.stacksize += STACK_INCREMENT; } *stack.top++ = data; return 1; } int Pop(SqStack &stack,SElemType &data) { if(stack.top == stack.base)return 0; data = *(--stack.top); return 1; } int IsEmpty(SqStack &stack) { if(stack.top != stack.base)return 0; return 1; }

栈的应用:

  • 数值转换
    输入任意一个非负10进制整数,打印输出其对应的8进制整数://数制转换——将10进制转成8进制 void ConversionToO() { SqStack stack; int d; InitStack(stack); scanf("%d",&d); while(d) { Push(stack,d%8); d /= 8; } while(!IsEmpty(stack)) { Pop(stack,d); printf("%d",d); } printf("\r\n"); }
  • 行编辑器程序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值