顺序栈ADT实现进制转换
来源:互联网 发布:vb控件适应窗体大小 编辑:程序博客网 时间:2024/05/29 18:35
/** Created by Microsoft Visual Studio 2013* @author: Teresa* @date: 2017-10-06* @description: 顺序栈操作*/#include <stdio.h>#include <stdlib.h>/*函数状态码*/#define TRUE 1 //成功#define OK 1#define FALSE 0 //失败 #define ERROR 0 //错误 #define INFEASIBLE -1 //不可行的#define OVERFLOW -2 //溢出#define STACK_INIT_SIZE 100 //存储空间初试分配量#define STACKINCREMENT 10 //存储空间分配增量typedef int SElemType; //基本数据类型typedef int Status; //函数的返回值类型 /*栈的顺序存储表示*/typedef struct{ SElemType *base; //栈底指针,始终指向栈底,如果为null说明栈不存在 SElemType *top; //栈顶指针,当top == base时,为空栈; int stackSize; //当前已分配的存储空间,以元素为单位}SqStack;//top-base为当前栈中的元素个数//构造一个空栈Status InitStack(SqStack &S){ S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if (!S.base) exit(ERROR); S.top = S.base; //栈顶指向栈底 S.stackSize = STACK_INIT_SIZE; return OK;}//销毁栈SStatus DestroyStack(SqStack &S){ free(S.base); //释放栈空间 S.top = S.base = NULL; //将栈顶和栈底置为NULL S.stackSize = 0; //存储空间置为0 return OK;}//把S置为空栈Status ClearStack(SqStack &S){ S.top = S.base; //栈顶指向栈底 return OK;}//判断S是否为空栈Status StackEmpty(SqStack &S){ if (S.top == S.base) return TRUE; else return FALSE;}//返回栈的元素个数 即栈的长度int StackLength(SqStack S){ return S.top - S.base;}//若栈不为空 则e返回S的栈顶元素 并返回OK 否则ERRORStatus GetTop(SqStack S, SElemType &e){ if (S.top > S.base){ e = *(S.top - 1); return OK; } else return ERROR;}//插入e为新的栈顶元素Status Push(SqStack &S, SElemType e){ if (S.top - S.base == S.stackSize){ //栈满 追加存储空间 S.base = (SElemType*)realloc(S.base, (S.stackSize + STACKINCREMENT)*sizeof(SElemType)); if (!S.base) exit(ERROR); S.top = S.base + S.stackSize; //修改栈顶指针 S.stackSize += STACKINCREMENT; //更新容量 } *(S.top++) = e; return OK;}//若栈不为空 则删除S的栈顶元素 用e返回其值 并返回OK 否则返回ERRORStatus Pop(SqStack &S, SElemType &e){ if (S.top == S.base) return ERROR; e = *--S.top; return OK;}//从栈底到栈顶依次对每个元素调用函数visit Status StackTraverse(SqStack S, Status(*visit)(SElemType)){ while (S.top > S.base){ visit(*(S.base++)); } printf("\n"); return OK;}//进制转换 int main(){ SqStack S; SElemType e; int n,m; InitStack(S); printf("请输入要转换的进制 n>0\n"); scanf("%d", &n); printf("请输入要进行进制转换的十进制数\n"); scanf("%d", &m); while (m){ Push(S, m%n); m = m / n; } printf("结果是\n"); while (!StackEmpty(S)){ Pop(S, e); printf("%d", e); } printf("\n"); return 0;}
阅读全文
0 0
- 顺序栈ADT实现进制转换
- 数据结构-->栈的顺序实现 ADT
- 栈的顺序存储实现进制转换
- 顺序栈之进制转换(C实现)
- 顺序栈实现数制转换
- 顺序表ADT实现(带注释)
- 基于顺序栈的进制转换
- 顺序栈的进制转换
- 采用顺序栈完成进制转换
- 数据结构 顺序栈进行进制转换
- 数据结构--链式栈、顺序栈的基本实现与简单应用:进制转换
- 栈ADT实现
- 栈ADT实现
- 顺序栈实现十进制转换二进制
- 数制转换--顺序栈的实现
- C_栈和队列(ADT)-队列的非循环(无头指针)顺序表示和实现
- C_栈和队列(ADT)-队列的非循环(带头指针)顺序表示和实现
- 进制转换器(用顺序栈实现)(可实现简单的二进制或八进制或十进制的转换)
- RPG游戏主角状态机(Trigger触发器)
- BZOJ 3875: [Ahoi2014&Jsoi2014]骑士游戏 dp spfa
- GDI+ BitMap save 保存图像
- 【NOI2005】瑰丽华尔兹
- 2017.10.07【NOIP提高组】模拟赛B组 偷懒的西西 题解
- 顺序栈ADT实现进制转换
- HDU-2138 How many prime numbers
- 前端学习第三弹:利用div+css制作个人简历
- 使用Markdown编辑数学公式(更新中)
- centos7配置环境变量
- python 缺位补齐
- DFS-带重复元素的全排列
- jzoj5399 【NOIP2017提高A组模拟10.7】Confess
- 国庆中秋假期训练