复习(数据结构):栈:c语言:练习题
2016-07-22 11:19
441 查看
共享空间的两栈
#include <stdio.h> #include <stdlib.h> #define Error(Str) FatalError(Str) #define FatalError(Str) fprintf(stderr,"%s\n",Str),exit(1) #define EmptyPos (-1) #define MiStackSize (5) #define StackIncrement (2) #define MAXSIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0; typedef int SElemType; typedef int Status; typedef struct{ SElemType data[MAXSIZE]; int top1; int top2; }SqDoubleSatck; Status visit(SElemType c){ printf("%d ",c); return OK; } // Status InitStack(SqDoubleSatck *s){ s->top1=-1; s->top2=MAXSIZE; return OK; } // s设置为空 Status ClearStack(SqDoubleSatck* s){ s->top1=-1; s->top2=MAXSIZE; return OK; } // 是空,返回true,否则,false Status StackEmpty(SqDoubleSatck s){ if(s.top1==-1 && s.top2==MAXSIZE) return TRUE; else return FALSE; } int StackLength(SqDoubleSatck s){ return (s.top1+1)+(MAXSIZE-s.top2); } Status Push(SqDoubleSatck *s,SElemType e,int stackNumber){ if(s->top1==s->top2) // 栈满 return ERROR; if(stackNumber==1) // 栈1,进栈 s->data[++s->top1]=e; // 先top1+1,然后元素 赋值 else if(stackNumber==2) s->data[--s->top2]=e; // 先top2-1,然后元素,赋值 return OK; } Status Pop(SqDoubleSatck *s,SElemType *e,int stackNumber){ if(stackNumber==1){ if(s->top1==-1) return ERROR; //栈1是空栈 *e=s->data[s->top1--]; //栈1的栈顶 元素出栈 }else if(stackNumber==2){ if(s->top2==MAXSIZE) return ERROR; *e=s->data[s->top2++]; } return OK; } Status StackTraverse(SqDoubleSatck s){ int i=0; while(i<s.top1) visit(s.data[i++]); i=s.top2; while(i<MAXSIZE) visit(s.data[i++]); printf("\n"); return OK; } int main(){ int j; SqDoubleSatck s; int e; if(InitStack(&s)==OK){ for(j=1;j<=5;j++) Push(&s,j,1); for(j=MAXSIZE;j>=MAXSIZE-2;j--) Push(&s,j,2); } Pop(&s,&e,2); return 0; }
递归和栈
相关文章推荐
- 几种简单的查找和排序思想
- SDUT 3341数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之数组二:稀疏矩阵
- vector用法详解
- 数据结构和算法C++语言实现:使用链表实现稀疏多项式
- hdu1010_tempter_of_the_Bone(dfs减枝)
- SDUT2117数据结构实验之链表二:逆序建立链表
- SDUT2116数据结构实验之链表一:顺序建立链表
- lintcode线段树的应用
- 数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
- 数据结构 打印两个有序链表的公共部分
- 数据结构 线性顺序栈
- 红黑树
- 数据结构 最大值减去最小值小于或等于num的子数组数量
- java链表的数据结构和二叉树的实现
- 数据结构基本概念
- 数据结构-串的堆分配存储
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- SDUT1138数据结构上机测试2-1:单链表操作A
- 数据结构实验之数组一:矩阵转置