栈的顺序
来源:互联网 发布:解压软件 mac 编辑:程序博客网 时间:2024/06/05 04:08
[cpp] view plaincopyprint?
#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define ERROR -1 #define STACKINITSIZE 20 #define STACKADDSIZE 5 typedef int ElemType; typedef int Status; typedef struct { ElemType *top; ElemType *base; int stackSize; } sqStack; Status InitStack(sqStack *s); Status PushStack(sqStack *s,ElemType e); Status PopStack(sqStack *s,ElemType *e); Status ClearStack(sqStack *s); Status DestroyStack(sqStack *s); int GetStackLen(sqStack *s); void my_err(char *s); int main(int argc,char *argv[]) { sqStack s; Status result; result=InitStack(&s); if(result==ERROR) { my_err("InitStack return Error."); } int i; for(i=0;i<47;i++) { result=PushStack(&s,i); if(result==ERROR) { my_err("PushStack return Error."); } } ElemType e; for(i=0;i<40;i++) { result=PopStack(&s,&e); if(result==FALSE) { printf("The stack has no value.\n"); break; } if(result==TRUE) { printf("%d,",e); } } printf("\nStack length:%d\n",GetStackLen(&s)); ClearStack(&s); DestroyStack(&s); exit(0); } //初始化栈 Status InitStack(sqStack *s) { s->base=(ElemType *)malloc(STACKINITSIZE*sizeof(ElemType)); if(!s->base) return ERROR; s->top=s->base; s->stackSize=STACKINITSIZE; return TRUE; } //入栈 Status PushStack(sqStack *s,ElemType e) { if(s->top-s->base>=s->stackSize)//当栈空间大小不足时,动态增长栈空间 { s->base=(ElemType *)realloc(s->base,(STACKADDSIZE+s->stackSize)*sizeof(ElemType)); if(!s->base) return ERROR; s->top=s->base+s->stackSize; s->stackSize+=STACKADDSIZE; } *(s->top)=e; s->top++; return TRUE; } //出栈 Status PopStack(sqStack *s,ElemType *e) { if(s->top==s->base) return FALSE; (*e)=*(--s->top); return TRUE; } //销毁栈 Status DestroyStack(sqStack *s) { free(s->base); s->base=s->top=NULL; s->stackSize=0; return TRUE; } //清空栈 Status ClearStack(sqStack *s) { s->top=s->base; return TRUE; } //获取栈中已有数据的长度 int GetStackLen(sqStack *s) { return s->top-s->base; //注意:地址指针相减,结果并不是地址差,而是实际元素的差值。 } void my_err(char *s) { perror(s); exit(1); }
0 0
- 【顺序栈作业】顺序栈的实现
- 顺序栈:栈的顺序存储结构
- 堆栈的顺序存储---顺序栈
- 栈的顺序实现
- 栈的顺序存储
- 顺序栈的运算
- 顺序栈的实现
- 顺序栈的子系统
- 顺序栈的操作
- 顺序栈的实现
- 顺序栈的操作
- 顺序栈的操作
- 顺序栈的实现
- 顺序栈的实现
- 顺序栈的实现
- 栈的顺序存储
- 栈的顺序存储
- 顺序栈的实现
- Android Event.getX 与getRawX的区别
- 1083 List Grades
- 红黑树的插入C实现
- 【小松教你手游开发】【unity实用技能】unity 内存调试方法
- Codeforces Round #192 (Div. 1) A. Purification(贪心模拟+清除每行每列)
- 栈的顺序
- 操作系统的历史 History of OS part 1
- 1093 count PAT's
- CAShapeLayer
- 记录学习python装饰器
- 成长编码1
- 1100 Mars Numbers
- 其他权限管理命令
- Wordpress的主题安装