栈的顺序实现
栈的顺序实现
时间:2006/03/27
测试环境: TC2.0
#include <stdio.h> #define True 1 #define False 0 #define LEN sizeof(ElemType) #define Stack_InitSize 100 #define Stack_Increment 30 typedef int ElemType; struct SqStack { ElemType *base; ElemType *top; int stacksize; }; /*构造一个空栈*/ void InitStack(struct SqStack *S) { S->base = (ElemType *)malloc(Stack_InitSize*LEN); if(!S->base) return; S->top = S->base; S->stacksize = Stack_InitSize; return; } /*销毁一个栈*/ void DestroyStack(struct SqStack *S) { while(S->top!=S->base) S->top--; free(S->base); free(S); } /*将栈里面的元素清空*/ void ClearStack(struct SqStack *S) { while(S->top!=S->base) S->top--; } /*判断是否为空栈*/ void IsEmpty(struct SqStack *S) { if(S->top==S->base) printf("/nThe SqStack is empty!"); else printf("/nThe SqStack is not empty!"); return; } /*按出栈顺序打印这个栈*/ void Print(struct SqStack *S) { ElemType *p; p = S->top; while(p!=S->base) { p--; printf("%d ",*p); } printf("/n"); p=NULL; } /*向栈里压入数据e*/ void Push(struct SqStack *S,ElemType e) { if(S->top - S->base >= S->stacksize) /*栈满,重新分配更大的空间*/ { S->base = (ElemType *)realloc(S->base,(S->stacksize+Stack_Increment)*LEN); S->top = S->base + S->stacksize; S->stacksize += Stack_Increment; } *S->top = e; S->top++; return; } /*弹出栈顶元素*/ void Pop(struct SqStack *S) { if(S->top==S->base) return; S->top--; printf("Pop the data:%d/n",*S->top); return; } /*返回栈顶元素*/ int GetTop(struct SqStack *S) { ElemType *p = S->top; if(S->top==S->base) { printf("The stack is empty!"); return False; } return *(--p); } void main() { struct SqStack *SS; int i; SS = NULL; /*初始化这个栈*/ InitStack(SS); /*将数据压入栈内*/ for(i=0;i<10;i++) Push(SS,i); /*以出栈顺序打印栈*/ Print(SS); printf("/n"); /*弹出栈顶元素,并再次打印栈*/ Pop(SS); Pop(SS); Print(SS); /*返回栈顶元素*/ i = GetTop(SS); printf("/nThe Top data is:%d/n",i); /*清空栈,并判断是否为空*/ ClearStack(SS); IsEmpty(SS); /*销毁栈*/ DestroyStack(SS); }
运行后结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程