双端栈
- 双端栈是为了更有效的利用栈的空间而产生的。
- 双端栈是一种特殊的顺序栈。
- 双端栈适用于一组互补的数据。
- 双端栈两端为底,2个整形表示栈顶指针。
代码收获
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct stack{
char data[MAXSIZE];
int top[2];
}stack,*stackp;
void InitialStack(stackp *ST){
*ST=(stackp)malloc(sizeof(stack));
(*ST)->top[0]=-1;
(*ST)->top[1]=MAXSIZE;
}
int PushStack(stackp ST){
printf("输入需要插入0号栈或1号栈\n");
int num;
scanf("%d",&num);
getchar();
if(num==0){
printf("输入要插入的元素,$结束\n");
int flag1 = 1;
while(flag1){
char c1;
c1 = getchar();
if(c1!='$'){
if((ST->top[0])+1==ST->top[1]){
printf("栈满\n");
return 1;
}else{
ST->data[ST->top[0]+1]=c1;
ST->top[0]++;
}
}else{
flag1 =0;
}
}getchar();
}else if(num==1){
printf("输入要插入的元素,$结束\n");
int flag2 = 1;
while(flag2){
char c2;
c2 =getchar();
if(c2!='$'){
if((ST->top[1])-1==ST->top[0]){
printf("栈满\n");
return 1;
}else{
ST->data[ST->top[1]-1]=c2;
ST->top[1]--;
}
}else{
flag2 =0;
}
}getchar();
}return 0;
}
void PrintStack(stackp ST){
printf("双端栈一端为\n");
int i = 0;
for(;i<=ST->top[0];i++){
printf("%c",ST->data[i]);
}
printf("\n另一端为\n");
int p=MAXSIZE-1;
for(;p>=ST->top[1];p--){
printf("%c",ST->data[p]);
}
}
int PopStack(stackp ST){
printf("选择栈0和1哪个出栈?\n");
int num;
scanf("%d",&num);
getchar();
if(num==0){
if(ST->top[0]==-1){
printf("已经空了\n");
}else{
ST->top[0]--;
}
}else if(num==1){
if(ST->top[1]==MAXSIZE){
printf("已经空了\n");
}else{
ST->top[1]++;
}
}PrintStack(ST);
}
void main(){
stackp ST;
InitialStack(&ST);
PushStack(ST);
PrintStack(ST);
PushStack(ST);
PrintStack(ST);
PopStack(ST);
}