数据结构复习之顺序栈的实现
#include <stdio.h> #include <stdlib.h> #include <malloc.h> //常量定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //自定义类型 typedef int Status; //函数返回值类型为int typedef int ElemType; //栈元素类型为int //栈的存储结构定义 typedef struct { ElemType *elem; int top; int size; int increment; } SqStack; //栈的初始化函数 Status init(SqStack &S, int size, int inc) { //分配存储空间 S.elem = (ElemType*)malloc(size * sizeof(ElemType)); //分配失败 if(S.elem == NULL) { return OVERFLOW; } S.top = 0; //设置栈顶为0,因为当前是空栈 S.size = size; //栈的长度 S.increment = inc; //每次增加的长度 return OK; } //入栈函数 Status push(SqStack &S, ElemType e) { //如果栈已经满了,则开辟新的空间 ElemType *newbase; if(S.top >= S.size) { newbase = (ElemType*)realloc(S.elem, (S.size + S.increment) * sizeof(ElemType)); if(newbase == NULL) { return OVERFLOW; } S.elem = newbase; S.size = S.size + S.increment; } //将e赋值给S.elem[top],并且是top加1 S.elem[S.top++] = e; return OK; } //出栈函数 Status pop(SqStack &S,ElemType &e) { if(S.top == 0) { return ERROR; } S.top--; e = S.elem[S.top]; return OK; } //取栈顶元素 Status getTop(SqStack &S, ElemType &e) { if(S.top == 0) { return ERROR; } e = S.elem[S.top-1]; } //清空栈 Status clear(SqStack &S) { int i; ElemType e; for(i = S.top; i > 0; i--) { pop(S, e); printf("%d\n", e); } } //判断栈是否为空 Status isEmpty(SqStack &S) { return (S.top == 0 ? TRUE : FALSE); } int main() { //声明一个栈类型的变量stack SqStack stack; //声明一个栈元素类型的变量e ElemType e; //初始化栈 init(stack, 5, 1); //初始化栈 //判空 printf("%s\n", isEmpty(stack) == 1 ? "stack is empty" : "stack isn't empty"); //入栈 push(stack, 1); push(stack, 2); //判空 printf("%s\n", isEmpty(stack) == 1 ? "stack is empty" : "stack isn't empty"); //取栈顶元素 getTop(stack, e); printf("%d\n", e); //2 //出栈 pop(stack, e); printf("%d\n", e); //2 //清空栈 clear(stack); //判空 printf("%s\n", isEmpty(stack) == 1 ? "stack is empty" : "stack isn't empty"); }
posted on 2016-02-29 20:02 ChessZhang 阅读(606) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?