#define MaxSize 10 //定义栈中元素的最大个数
typedef struct
{
ElemType data[MaxSize]; //静态数组存放栈中元素
int top;
}SqStack;
//初始化操作
void InitStack(SqStack &S)
{
S.top=-1; //初始化栈顶指针
}
//新元素入栈
bool Push(SqStack &S,ElemType x)
{
if(S.top==MaxSize-1) //栈满
return false;
S.top=S.top+1; //指针先加一
S.data[S.top]=x; //新元素入栈
return true;
}
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct{
ElemType data[MaxSize]; //静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
//出栈操作
bool Pop(SqStack &S,ElemType &x)
{
if(S.top==-1)
return false; //栈空,报错
x=S.data[S.top]; //栈顶元素先出栈
S.top=S.top-1; //指针再减一
return true;
}
//出栈操作也可以写为
//x=S.data[S.top--];
//读栈顶元素
bool GetTop(SqStack S,ElemType &x)
{
if(S.top==-1)
return false;
x=S.data[s.top];
return true;
}
//共享栈
#define MaxSize 10 //定义栈中元素的个数
typedef struct
{
ElemType data[MaxSize]; //静态数组存放栈中元素
int top0; //0号栈栈顶指针
int top1; //1号栈栈顶指针
}ShStack;
//初始化栈
void InitStack(ShStack &S)
{ //初始化栈顶指针
S.top0=-1;
S.top1=MaxSize;
}
//栈满条件: //top0+1=top1
//入队操作
#define MaxSize 10 // 定义队列中元素的最大个数
typedef struct
{
ElemType data[MaxSize]; //用静态数组存放队列元素
int front,rear; //对头指针和队尾指针
} SqQueue;
//判断队列是否为空
bool QueueEmpty(SqQueue Q)
{
if(Q.rear==Q.front) //队空条件
return true;
else
return false;
}
//入队
bool EnQueue(SqQueue &Q,ElemType x)
{
if((Q.rear+1)%MaxSize==Q.front)
return false; //队列满则报错
Q.data[Q.rear]=x; //新元素插入队尾
Q.rear=(Q.rear+1)%MaxSize; //队尾指针加一取模,将存储空间在逻辑上变成了环状
return true;
}
//出队操作
bool DeQueue(SqQueue &Q,ElemType &x)
{
if(Q.rear==Q.front)
return false; //队空则报错
x=Q.data[Q.front];
return true;
}
如何判断队列已满/空
队列的元素个数;(rear+MaxSize-Front)%MaxSize
方法一:
#define Maxsize 10
typedef struct
{
ElemType data[MaxSize];
int front,rear; //初始化时rear=front=0
}SeQueue;
队列已满的条件:队尾指针的再下一个位置是队头。即(Q.rear+1)%MaxSize==Q.front
队空条件;Q.rear==Q.front
方法二:
#define Maxsize 10
typedef struct
{
ElemType data[MaxSize];
int front,rear;
int size; //队列的长度。插入成功时size++,删除成功是size--
}SqQueue; //初始化时rear=front=0,size=0
队满条件:size==MaxSize
队空条件:size==0
方法三:
#define Maxsize 10
typedef struct
{
ElemType data[MaxSize];
int front,rear;
int tag; //最近进行的是删除/插入,每次删除成功时,tag=0,插入成功时tag=1
}SqQueue; //初始化时rear=front=0,tag=0
队满条件:front==rear&&tag==1;
队空条件:front==rear&&tag==0