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

数据结构笔记3双向栈

2015-12-02 16:45 781 查看
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 100
//定义两个方向生长的栈
typedef struct{
int data[MAX];
int top1,top2;
}DDStack;
DDStack s;
//创建
int InitStack(DDStack s){
s.top1=-1;
s.top2=MAX-1;
return 0;
}
//判满
int FullStack(DDStack s){
if(s.top1==s.top2-1)
return 1;
return 0;
}
//入栈 奇数放左边偶数放右边
int PushStack(DDStack s,int e){
int i=0;
int count=0;
if(e%2==0){
s.data[i++]=e;
s.top2--;
count++;
}
else{
s.data[i++]=e;
s.top1++;
count++;
}
return count;
}
//显示
int ShowStack(DDStack s,int count){
if(-1==s.top1&&MAX==s.top2){
printf("栈是空的!\n");
exit(0);
}
else
for(int i=0;i<count-1;i++)
printf("%d ",s.data[i]);
printf("%d",s.data[count-1]);
return 0;
}
//出栈
int PopStack(DDStack s,int count){
int i;
loop:
printf("请选择你要出栈的方向:1-左边,2-右边");
scanf("%d",&i);
if(i==1){
s.top1--;
count--;
}
else if(i==2){
s.top2++;
count--;
}
else
printf("你的输入有误,清再次输入!\n");
return count;
}
int main(){
DDStack s;
int i,e,count;
if(InitStack(s)){
printf("创建失败,按任意键返回!\n");
getch();
exit(0);
}
else{
printf("请输入你要入栈的个数:");
scanf("%d",&i);
printf("请输入你要入栈的数据:");
for(int j=0;j<i;j++){
if(FullStack(s)){
printf("占已满!无法进行入栈操作!\n");
break;
}
scanf("%d",&e);
PushStack(s,e);
count=PushStack(s,e);
printf("111\n");
}
ShowStack(s,count);
}
printf("是否进行出栈操作?1-是");
printf("请输入你的数字:");
scanf("%d",&i);
if(i==1){
count=PopStack(s,count);
ShowStack(s,count);
}
else
printf("栈的操作已经结束!\n");
printf("栈的操作已经结束!\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: