栈的顺序存储表示
#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 //Status是函数的类型,其值是函数结果状态代码 typedef int Status; typedef int SElemType; #include "malloc.h" typedef struct{ SElemType *base; //在栈构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 }SqStack; //-------基本操作的函数原型说明------------- Status InitStack(SqStack &S); //构造一个空栈S Status DestroyStack(SqStack &S); //销毁栈S,S不再存在 Status ClearStack(SqStack &S); //把S置为空栈 Status StackEmpty(SqStack S); //若栈S为空栈,则返回TRUE,否则返回FALSE int StackLength(SqStack S); //返回S的元素个数,即栈的长度 Status GetTop(SqStack S,SElemType &e); //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR Status Push(SqStack &S,SElemType e); //插入元素e为新的栈顶元素 Status Pop(SqStack &S,SElemType &e); //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR Status StackTraverse(SqStack S,Status (*visit)()); //从栈底到栈顶依次对栈中的每个元素调用函数visit()。一旦visit()失败,则操作失败 Status InitStack(SqStack &S){ S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }//InitStack Status GetTop(SqStack S,SElemType &e){ if(S.top==S.base) return ERROR; e=*(S.top-1); return OK; }//GetTop 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(OVERFLOW); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK; }//Push Status Pop(SqStack &S,SElemType &e){ if(S.top==S.base) return ERROR; e=*--S.top; return OK; }//Pop Status StackEmpty(SqStack S){ if(S.top==S.base) return TRUE; return FALSE; }//StackEmpty
#include "stdafx.h" #include "stdlib.h" #include "stdio.h" #include "SqStack.h" void conversion(){ SqStack S; SElemType e; int N; InitStack(S); scanf("%d",&N); while(N){ Push(S,N%8); N=N/8; } while(!StackEmpty(S)){ Pop(S,e); printf("%d",e); } } int main(int argc, char* argv[]) { conversion(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义