一、简介
关于数据结构学习的相关代码,是本人在学习过程中,完全根据自己的理解所写的一些基本操作,可能会产生一些错误,但本人写博客的原因只为记录一下个人的学习记录,如有读者看到本人博客有错误的地方,请指正。
二、具体实现
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100//定义一个宏,代表初始化数组的大小
//共享顺序栈
struct ShareSqu
{
int arr[MAXSIZE];
int top[2];//记录两个栈底下标
};
//对栈进行初始化
void InitStack(ShareSqu *stack){
stack->top[0] = -1;//-1表示栈空
stack->top[1] = MAXSIZE - 1;//表示栈空
}
//进栈又称压栈 data表示要进栈的数据 flag表示选择进哪个栈
bool push(ShareSqu *stack,int data,int flag){
if (stack->top[1] - stack->top[0] == 1){
return false;
}
if (flag == 0){
stack->arr[++stack->top[0]] = data;
return true;
}
else if(flag ==1){
stack->arr[stack->top[1]--] = data;
return true;
}
return false;
}
//data用于记录或者保存要出栈的数据 flag表示选择哪个栈进行出栈操作
bool pop(ShareSqu *stack, int data, int flag){
//条件一,表示栈一为空 条件2表示栈二为空
if ((flag==0&&stack->top[0]==-1)&&(flag==1&&stack->top[1]==MAXSIZE-1)){
return false;
}
if (flag==0){
//栈底是-1,这里要后减
data = stack->arr[stack->top[0]--];
printf("%d",data);
return true;
}
else if (flag==1){
//采用数组的尾部作为栈底,栈的其实栈底为MAXSIZE-1,这里要先加
data = stack->arr[++stack->top[1]];
printf("%d", data);
return true;
}
return false;
}
void main(){
ShareSqu squ = { 0 };
int data = 0;
InitStack(&squ);
if (push(&squ, 1, 0) && push(&squ, 2, 1) && push(&squ, 1, 0)){
if (pop(&squ, data, 0), pop(&squ, data, 1),pop(&squ, data, 0)){
}
else{
}
}
else{
}
}