两栈共享空间

来源:互联网 发布:vray for rhino mac 编辑:程序博客网 时间:2024/05/22 14:17

明确:
1.栈一为空,指向-1
2.栈二为空,指向MAXSIZE

#include <iostream>using namespace std;#include "stdio.h"#include "stdlib.h"#include "io.h"#include "math.h"#include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *//* 两栈共享空间结构 */typedef struct{    SElemType data[MAXSIZE];    int top1;   //栈1的栈顶指针    int top2;   //栈2的栈顶指针}SqDoubleStack;Status initializer_list(SqDoubleStack *Q){    Q->top1=-1;    Q->top2=MAXSIZE;}Status ClearStack(SqDoubleStack *Q){    Q->top1 = -1;    Q->top2 = MAXSIZE;    return OK;}int LengthStack(SqDoubleStack *Q){    return Q->top1+1 + (MAXSIZE-Q->top2);}Status isEmpty(SqDoubleStack *Q){       //这里指的是总栈为空,而非栈1或栈2为空    if(Q->top1==-1&&Q->top2==MAXSIZE){        return TRUE;    }else{        return FALSE;    }}//e插入元素,s插入栈的类型 1表示插入栈1 2表示插入栈2Status Push(SqDoubleStack *S,SElemType e,int stackNumber){    if(S->top1+1 == S->top2){       //栈满        return ERROR;    }    if(stackNumber == 1){ //要插入栈1        S->data[++S->top1] = e;    }else if(stackNumber == 2){        S->data[--S->top2] = e;    }    return OK;}Status Pop(SqDoubleStack *S,SElemType *e ,int stackNumber){    if(stackNumber==1){        if(S->top1 == -1){  //栈1已经空了            return ERROR;        }        *e = S->data[S->top1--];    }else{         if(S->top2 == MAXSIZE){  //栈2已经空了            return ERROR;        }        *e = S->data[S->top2++];    }}void StackTraverse(SqDoubleStack S){       int i;        i=0;        while(i<=S.top1)        {                printf("栈1元素%d\n",S.data[i++]);        }        i=S.top2;        while(i<MAXSIZE)        {                printf("栈2元素%d\n",S.data[i++]);        }        printf("\n");}int main(){    SqDoubleStack s;    initializer_list(&s);    printf("测试入栈\n");    int i=0;    for(;i<10;i++){        Push(&s,i+1,1);    }    for(i=MAXSIZE;i>=MAXSIZE-9;i--)        Push(&s,i,2);    StackTraverse(s);    printf("测试出栈\n\n");    int returnResult;    for(i=s.top1;i>-1;i--){        Pop(&s,&returnResult,1);        printf("栈1出栈元素%d\n",returnResult);    }    for(i=s.top2;i<MAXSIZE;i++){        Pop(&s,&returnResult,2);        printf("栈2出栈元素%d\n",returnResult);    }    printf("总栈的长度\n");    printf("%d\n",LengthStack(&s));}
0 0
原创粉丝点击