栈的基本
来源:互联网 发布:上饶师范学院网络教育 编辑:程序博客网 时间:2024/05/29 15:39
#include<stdio.h> //用数组创建栈#include<stdlib.h>#define stack_init_size 100#define stack_newlenth 100 //新增加的长度struct stack{ int size; int *top; int *base;}s;void initstack() //初始化栈{ s.base=(int *)malloc(stack_init_size * sizeof(int)); //s.base 指向的地址大小为层数*int字节数 if(!s.base) //如果s.base为空,则分配失败。正常应该存地址 printf("分配空间失败"); s.top=s.base; //注意不能赋反 s.size=stack_init_size;}int is_empty() //判断栈是否为空{if(s.base==s.top)return 1;else return 0;}void push(int i) //入栈{ if(s.top-s.base>=s.size) { s.base=(int *)realloc(s.base,(stack_init_size+stack_newlenth)*sizeof(int)); if(!s.base) //如果内存满,重新分配。如果分配的内存被占用,则realloc函数自动复制所有值重新寻找新的空间 printf("重新分配失败"); s.top=s.base+s.size; s.size=stack_init_size+stack_newlenth; } *s.top=i; s.top++;}int out() //出栈{ int e; if(is_empty() ) return 0; s.top--; e=*s.top; return e;}int gettop() //栈顶元素{ int num; if(is_empty()) { printf("impossible!"); return 0; } num=*(s.top-1); return num;}int main(){ int n,i,x,j,k,q;printf("输入入栈次数:"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("输入操作数:"); scanf("%d",&x); if(x==1) { scanf("%d",&j); push(j); } else if( x==2) { k=out(); if(k) k; else { printf("impossible!"); //如果栈为空就不能再出战,程序结束 return 0; } } else if(x==3) { q=gettop(); if(q) { printf("栈顶元素为:"); printf("%d\n",q); } else return 0; //如果栈为空,则查看不了栈顶元素,程序结束; } } return 0;}//其次还有清空栈和销毁栈//清空就是让s.top==s.base//销毁就是free(s.base);
0 0
- 栈的基本算法
- 栈的基本运算
- 栈的基本练习
- 栈的基本操作
- 栈的基本构造
- 栈的基本操作
- 栈 的基本操作。
- 栈的基本操作
- 栈的基本操作
- 栈的基本算法
- 栈的基本操作
- 栈的基本实现
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- [leetcode][dfs] Binary Tree Maximum Path Sum
- perl http 请求一些奇怪的问题
- 解决ubtuntu 64位上路径设置完全,依然包无权限访问13且R文件生成不了
- 注销 弹出来的消息实现方法
- NYOJ 252 01串
- 栈的基本
- 在 mediawiki 实现导出 中文pdf
- Redis简介
- 志愿者选拔(单调队列)
- Mac os x实用技巧-关闭渐隐和弹出动画效果
- Top 10:HTML5、JavaScript 3D游戏引擎和框架
- 自动对焦拍照,以及可移动方框定位
- 测试用例的编写
- 九宫格