您的位置:首页 > 理论基础 > 数据结构算法

复习(数据结构):栈: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;
}


递归和栈

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: