顺序栈
来源:互联网 发布:ubuntu阻塞脚本自启动 编辑:程序博客网 时间:2024/06/10 00:33
栈可以看做受限的顺序表,它的插入与删除只能在表尾进行,将表尾称为栈顶,表头称为栈底。不含元素的空表称为空栈。根据栈的定义可以知道栈的修改遵循后进先出的原则。
下面给出顺序栈的相关操作:
#include<stdio.h>#include<malloc.h>typedef int ElemType;#define INIT_SIZE 10#define INC_SIZE 5typedef struct SeqStack //栈的结构体定义{ ElemType *base; ElemType top; ElemType size;}SeqStack;void InitStack(SeqStack *s) //初始化{ s->base = (ElemType *)malloc(sizeof(ElemType)); s->top = 0; //栈顶指向0 s->size = INIT_SIZE;}int IsEmpty(SeqStack s) //判断栈是否为空{ return s.top = 0 ? 1 : 0; //将栈顶的值返回 若为0则表示为空栈 }int IsFull(SeqStack s) //判断是否为满栈{ return s.top>s.size ? 1 : 0; //依旧将栈顶的值返回 若大于栈的容量size 则表示栈已经满了}void Show(SeqStack s) //显示函数 将栈内的元素显示出来{ int i; for(i=s.top-1; i>0; i--) //利用循环 从栈顶元素开始依次输出打印 printf("%d ", s.base[i]); printf("\n");}int Inc(SeqStack *s) //增加空间 当输入元素个数超过栈初始化时的容量是需要增加栈的空间{ int newsize = s->size + INC_SIZE; //定义新的空间 它的大小等于原来栈的大小加上要开辟的空间大小 s->base = (ElemType*)realloc(s->base, sizeof(ElemType)*newsize); //利用realloc()函数动态开辟空间 在原来的空间里开辟sizeof大小的空间 if(s->base == NULL) return 0; else { s->size = newsize; //修改栈的大小 return 1; }}void Push(SeqStack *s, ElemType x) //压栈操作 { if(IsFull(*s) && Inc(s)) { printf("栈已满且增加空间失败,不能进行进栈操作!\n"); return; } s->base[s->top] = x; //将要压入的数据赋给栈顶所指的空间 s->top++; //top上移}void Pop(SeqStack *s) //出栈操作{ if(IsEmpty(*s)) { printf("栈已空,无法进行出栈操作!\n"); return; } s->top--; //将栈顶下移}int Length(SeqStack s) //求栈的长度{ return s.top-1; //返回栈顶的位置 由于栈的初始化里将栈顶置为0 所以在每次压栈操作结束后栈顶都会向上移动 故top在最后元素的上面} //所以 将top-1就能得到栈的长度void Clear(SeqStack *s) //清除操作{ s->top = 0; //将top置零}void Destroy(SeqStack *s) //销毁{ if(s->base != NULL) { free(s->base); //释放栈空间并置空 s->base = NULL; } s->top = 0; //栈顶top置零 大小置零 s->size = 0;}int GetTop(SeqStack *s, ElemType *x) //获取栈顶元素{ if(IsEmpty(*s)) return 0; *x = s->base[s->top-1]; return 1;}
0 0
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- 顺序栈
- DPCM差分预测编码
- poj 3126
- 第十四届北京师范大学程序设计竞赛决赛训练总结2017/5/7
- web8 CSS常见属性
- 机器学习-周志华-个人练习8.3和8.5
- 顺序栈
- 从零开始学Scala系列(五)之集合2--Set和Map
- Intellij IDEA如何像eclipse那样自动完成代码的补全
- eclipse 创建maven web项目
- caffe安装过程详解linux版本
- C中#if 0 和#if 1&&#ifdef, #else, #endif, #if详细
- 制作自己的python版本的类CIFAR10数据集
- 深度学习Dya1-初识Python(Python环境搭建及numpy、matplotlib包安装)
- CentOS6.5安装Mysql数据库