两栈共享空间
2015-05-16 19:11
597 查看
#include<stdio.h> #include<stdlib.h> #include<time.h> #define OK 1 #define ERROR 0 #define MAXSIZE 20 typedef int SElemType; typedef int Status; typedef struct { SElemType data[MAXSIZE]; int top1; //栈1栈顶指针 int top2; //栈2栈顶指针 }SqDoubleStack; //双头栈的初始化 Status InitSqDoubleStack(SqDoubleStack * S) { S->top1=-1; S->top2=MAXSIZE; return OK; } //双头栈的建立 Status Create(SqDoubleStack * S,int n,int m) { srand(time(0)); for(int i=0;i<n;i++) { S->data[++S->top1]=rand()%100+1; } for(int j=0;j<m;j++) { S->data[--S->top2]=rand()%100+1; } return OK; } //插入元素e为型的栈顶元素 Status Push(SqDoubleStack * S,SElemType e,int stackNumber) { if(S->top1+1==S->top2) //栈满,不能再push元素 { return ERROR; } if(stackNumber==1) //栈1有元素进栈 { S->data[++S->top1]=e; //若栈1则先top1+1后给数组元素赋值 } else if(stackNumber==2) //栈2有元素进栈 { S->data[--S->top2]=e; //若栈2则先top2-1后给数组元素赋值 } return OK; } //若栈不空,则删除S的栈顶元素,用e返回其值,并放回OK,否则返回ERROR Status Pop(SqDoubleStack * S,SElemType * e,int stackNumber) { if(stackNumber==1) { if(S->top1==-1) { return ERROR; //说明栈1已经空了 } *e=S->data[S->top1--]; //将栈顶元素出栈 } else if(stackNumber==2) { if(S->top2==-1) //说明栈2已经空了 { return ERROR; } *e=S->data[S->top2++]; //将栈顶元素出栈 } return OK; } //输出 void Print(SqDoubleStack * S) { printf("栈1元素:\n"); for(int i=0;i<=S->top1;i++) { printf("%d ",S->data[i]); } printf("\n"); printf("栈2元素:\n"); for(int j=MAXSIZE-1;j>=S->top2;j--) { printf("%d ",S->data[j]); } printf("\n"); } int main() { int n1,n2; int NewNumber; int DeleteNumber; int countPush; int countPop; SqDoubleStack S; InitSqDoubleStack(&S); printf("请分别输入两个栈的元素个数:\n"); scanf("%d%d",&n1,&n2); Create(&S,n1,n2); printf("输出元素:\n"); Print(&S); printf("--------------------------------\n"); printf("入栈操作:\n"); printf("请输入插入的值:\n"); scanf("%d",&NewNumber); printf("若要插入栈1,请输入1.\n若要插入栈2,请输入2.\n"); scanf("%d",&countPush); Push(&S,NewNumber,countPush); printf("输出入栈后的元素:\n"); Print(&S); printf("--------------------------------\n"); printf("出栈操作:\n"); printf("若要删除栈1栈顶元素,请输入1.\n若要删除栈2栈顶元素,请输入2.\n"); scanf("%d",&countPop); Pop(&S,&DeleteNumber,countPop); printf("删除的元素为:%d\n",DeleteNumber); printf("输出出栈后的元素:\n"); Print(&S); printf("--------------------------------\n"); return OK; }
相关文章推荐
- 两栈共享空间
- 顺序栈的测试实验《两栈共享一个数组空间》
- C++数据结构:栈——顺序栈实现的之二:两栈共享空间
- 两栈共享空间的c语言实现
- 两栈共享空间【转】
- C++类模板 实现两栈共享数组空间的算法 《数据结构》(北京科海) 自己摘抄完成
- C语言实现两栈空间共享
- 【数据结构】两栈共享空间_DoubleStack
- 两栈共享空间
- 顺序栈,两栈共享空间,链栈
- [学习笔记]栈的顺序存储结构和两栈共享空间
- 两栈共享空间
- 数据结构:两栈共享空间
- C++两栈共享空间
- 两栈共享空间(DoubleStack)
- 两栈共享空间
- 顺序栈的实现和两栈共享空间
- 两栈共享存储空间
- 数据结构 两栈共享空间
- Java实现栈-两栈共享空间