#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct
{
int *base1;
int *base2;
int *top1;
int *top2;
}sqstack;
int leftstacklength=0;
int rightstacklength=0;
void menu()
{
printf(" |************************************|\n");
printf(" |* ***|\n");
printf(" |* 1--popr ***|\n");
printf(" |* 2--popl ***|\n");
printf(" |* 3--empty ***|\n");
printf(" |* 4--full ***|\n");
printf(" |* 5--pushr ***|\n");
printf(" |* 6--pushl ***|\n");
printf(" |* 7--clear ***|\n");
printf(" |* 0--BREAK ***|\n");
printf(" |* ***|\n");
printf(" |***********************************|\n");
}
sqstack initstack(sqstack H)
{
int stackmaxlength;
printf("\nplease input the max length of twostacks: ");
scanf("%d",&stackmaxlength);
H.base1=(int *)malloc(stackmaxlength*sizeof(int));
if(!H.base1) exit(1);
H.top1=H.base1;
H.base2=H.base1+stackmaxlength-1;
H.top2=H.base2;
printf("\INIT left stacks");
printf("\nplease enter the left stack data,end with 0:\n");
for(;scanf("%d",H.top1); (H.top1++,leftstacklength++))
{
if(*H.top1==0) break;
if(H.top1>=H.top2)
{ printf("\n twostacks FULL!!\n");
H.top1++;
leftstacklength++;break;
}
}
if(H.top1>H.top2)
{ printf("\n twostacks FULL!!\n");}
else
{printf("\n INIT right stack");
printf("\n please enter the data to right stack,end with 0:\n");
for(;scanf("%d",H.top2);(H.top2--,rightstacklength++))
{
if(*H.top2==0) break;
if(H.top1>=H.top2)
{ printf("\n twostacks FULL!!\n");
H.top2--;
rightstacklength++;break;
}
}
}
return H;
}
sqstack clear(sqstack s)
{
int e;
if(s.base1==s.top1) printf("\nleft stack empty\n");
else
{
printf("\nthe %d data of left stack is:\n",leftstacklength);
while(s.base1!=s.top1)
{
s.top1--;
e=*s.top1;
printf("%d ",e);
}
}
if(s.base2==s.top2) printf("\n right stack empty:\n");
else
{
printf("\nthe %d data of right stack is:\n",rightstacklength);
while(s.base2!=s.top2)
{
++s.top2;
e=*s.top2;
printf("%d ",e);
}
}
if(s.top1==s.base1&&s.top2==s.base2)
{printf("\ntwostack is been empty!!,\n");
printf("again other programm please NINT the two stacks!!\n");}
leftstacklength=0;
rightstacklength=0;
return s;
}
sqstack popl(sqstack s)
{
int e;
int *p;
if(s.top1==s.base1)
{
printf("\nleft stack empty!!!\n");
}
else
{ p=--s.top1;
e=*p;
leftstacklength--;
printf("\n the pop data of left stack is:%d",e);
}
if(s.top1>s.top2)
{ printf("\ntwo stack FULL!!!\n");}
return s;
}
sqstack popr(sqstack s)
{
int e;
int *p;
if( s.top2==s.base2)
{
printf("\nright stack empty!!!\n");
}
else
{ p=++s.top2;
e=*p;
rightstacklength--;
printf("\n the pop data of right stack is:%d",e);
}
printf("\n\n");
return s;
}
void empty(sqstack s)
{ if((s.top1==s.base1)&&(s.top2==s.base2))
printf("\ntwostack empty!!\n\n");
else
{ printf("\n two stack is not empty!!\n");}
if(s.top1==s.base1)
{printf("\n left stack empty!!\n"); }
if(s.top2==s.base2)
{printf("\n right stack empty!!\n");}
}
void full(sqstack s)
{
if(s.top1>s.top2)
{ printf("\n twostacks FULL!!\n\n");}
else
{ printf("\n twostacks is not FULL!!\n\n");}
}
sqstack pushl(sqstack s)
{
int data;
if(s.top1>s.top2)
{ printf("\n twostacks FULL!!\n");}
else
{ printf("\nenter a data to left stack: ");
scanf("%d",&data);
*s.top1=data;
s.top1 ++;
leftstacklength++;
}
printf("\n\n");
return s;
}
{ int data;sqstack pushr(sqstack s)
if(s.top1>s.top2)
{ printf("\n twostacks FULL!!\n");}
else
{ printf("\n enter a data to right stack: ");
scanf("%d",&data);
*s.top2=data;
s.top2 --;
rightstacklength++;
}
printf("\n\n");
return s;
}
void print(sqstack s)
{ int *left,*right;
int e;
left=s.top1;
right=s.top2;
if(s.base1==left) printf("\nleft stack empty,%d data in left stack!!\n",leftstacklength);
else
{
printf("\nthe %d data of left stack is:\n",leftstacklength);
while(s.base1!=left)
{
left--;
e=*left;
printf("%d ",e);
}
}
if(s.base2==right) printf("\nright stack empty,%d data in right stack!!\n",rightstacklength);
else
{
printf("\nthe %d data of right stack is:\n",rightstacklength);
while(s.base2!=right)
{
++right;
e=*right;
printf("%d ",e);
}
}
if(s.top1==s.base1&&s.top2==s.base2)
{printf("\ntwostack is empty!!,no data in the twostack\n");}
}
void main()
{
sqstack H;
char choose,yes_no;
H=initstack(H);
printf("\n");
do
{
menu();
printf("\nplease choose the programm number(0-9):");
choose=getche();
switch(choose)
{
case '1': H=popr(H);print(H);break;
case '2': H=popl(H);print(H);break;
case '3': empty(H); break;
case '4': full(H);print(H); break;
case '5': H=pushr(H);print(H);printf("\n");break;
case '6': H=pushl(H);print(H);printf("\n");break;
case '7': H=clear(H);printf("\n");break;
case '0': break;
default: printf("\nERROR CHOOSE NUMBER !!\n");break;
}
printf("\nagain the program enter Y(y): ");
yes_no=getch();
printf("\n\n");
} while(yes_no=='y'||yes_no=='Y');
}
![avatar](https://profile-avatar.csdnimg.cn/ffe6385842174d4e84128c674b561472_lanys2008.jpg!1)
lanys2008
- 粉丝: 3
- 资源: 7
最新资源
- 【独家首发】鲸鱼算法WOA优化Transformer-LSTM负荷数据回归预测【含Matlab源码 6386期】.zip
- 【独家首发】开普勒算法KOA优化Transformer-LSTM负荷数据回归预测【含Matlab源码 6387期】.zip
- MATLAB轴承动力学模拟:不同故障类型下的滚动轴承性能分析与时域波形输出,MATLAB轴承动力学模拟:不同故障类型下的滚动轴承性能分析与时域波形输出,MATLAB轴承动力学代码(正常、外圈故障、内圈
- 【JCR1区】鸽群算法PIO-CNN-SVM故障诊断分类预测【含Matlab源码 5787期】.zip
- 【独家首发】金枪鱼算法TSO优化Transformer-LSTM负荷数据回归预测【含Matlab源码 6385期】.zip
- 【BiLSTM数据预测】双向长短时记忆BiLSTM(多输入单输出)数据预测【含Matlab源码 1826期】.zip
- 【BiLSTM数据预测】双向长短时记忆BiLSTM数据预测【含Matlab源码 1793期】.zip
- 【LSTM时间序列预测】深度学习的长短期记忆网络LSTM时间序列预测未来【含Matlab源码 2345期】.zip
- 【LSTM数据预测】BP+ELM+LSTM+BiLSTM+SAELSTM数据预测【含Matlab源码 1825期】.zip
- 【风速预测】DBN算法风速预测【含Matlab源码 1400期】.zip
- 【LSTM回归预测】长短期记忆网络数据回归预测(多输入多输出)【含Matlab源码 3200期】.zip
- 【ARMA仿真】 ARMA模型卡尔曼滤波【含Matlab源码 2431期】.zip
- 【ARMA故障预测】ARMA故障预测【含Matlab源码 2432期】.zip
- 【ARMA时间序列分析】ARMA时间序列分析【含Matlab源码 2430期】.zip
- 【预测模型】模糊小波神经网络目标威胁评估【含Matlab源码 1621期】.zip
- 【BiLSTM数据预测】双向长短时记忆BiLSTM数据预测【含Matlab源码 1824期】.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)