栈操作
来源:互联网 发布:sql 修改 primary key 编辑:程序博客网 时间:2024/06/09 03:10
程序代码:
#include"stdio.h"#include"stdlib.h"#include<iostream>using namespace std;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{//定义一个栈 int*base; int*top; int stacksize;}sqstack;void initstack(sqstack *s)//初始化一个空栈{ s->base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));//栈底指向内存的开始 if (!s->base) return; s->top = s->base;//栈顶和栈底相同时,栈的容量为0 s->stacksize = STACK_INIT_SIZE;//栈的最大容量}void pushelem(sqstack*s, int item)//元素入栈{ if (s->top - s->base >= s->stacksize)//当栈满时,重新扩展栈容量 { s->base = (int*)realloc(s->base, (STACK_INIT_SIZE + STACKINCREMENT)*sizeof(int)); if (!s->base) return; s->top = s->base + s->stacksize;//注意要对栈顶指针进行修改 s->stacksize = STACK_INIT_SIZE + STACKINCREMENT; } *(s->top) = item; s->top++;}void popelem(sqstack*s,int*e)//元素出栈{ if (s->top == s->base)//如果栈为空,返回 return; s->top--;//栈顶指针减一,这里一定是先将top指针减一然后再弹出 *e = *(s->top);//将弹出的元素赋值给e指向的指针}void clearstack(sqstack*s)//清空一个栈{ s->top = s->base;}void destroystack(sqstack*s)//销毁一个栈{ free(s->base); s->base = s->top = NULL; s->stacksize = 0;}int stacklen(sqstack *s){ return(s->top - s->base);}int main(){ sqstack s; initstack(&s); for (int i = 0; i < 5; i++) pushelem(&s, i); for (int i = 0; i < 5; i++) { int e; popelem(&s, &e); cout << e << " "; } system("pause"); return 0;}
程序结果:
0 0
- 栈::操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 栈 操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 栈操作
- 用栈操作实现队列的操作
- 栈的操作
- linux操作目录栈
- [LeetCode]130. Surrounded Regions
- 1.1Maven简介
- linux下的开源文件恢复工具
- Qt在pro文件中加入带空格的路径
- Delphi调用SQL分页存储过程实例
- 栈操作
- Android杂谈--Activity、Window、View的关系
- 跟从别人的脚步,学习machine-learning
- 解决使用Genymotion出现Unable to start the virtual device.VirtualBox cannot start the virtual device.问题
- [wxWidgets]_[初级]_[使用wxFormBuilder设计XRC文件快速开发界面]
- 文件下载该注意的问题
- Android知识总结--ListView的BaseAdapter抽取
- 那些行业常常会用到ABBYY
- Java从业者的职业成长路线图