目录
3.1 顺序栈
3.1.1 栈的定义
#define MaxSize 50
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int top;//栈顶指针——始终指向栈顶元素
}SqStack;
3.1.2 初始化栈
//初始化栈
bool InitStack(SqStack& S) {
S.top = -1;
return true;
}
3.1.3 判空
bool StackEmpty(SqStack S) {
if (S.top == -1) {
return true;
}
return false;
}
3.1.4 入栈
栈满不入:
bool Push(SqStack& S, ElemType x) {
if (S.top == MaxSize - 1) {//栈满不入
return false;
}
S.data[++S.top] = x;//先S.top++,再S.data[S.top] = x,即先移动栈顶指针,再赋值
return true;
}
3.1.5 弹栈
栈空不出:
bool Pop(SqStack& S, ElemType& x) {
if (S.top == -1) {
return false;
}
x = S.data[S.top--];
return true;
}
3.1.6 获取栈顶元素
bool GetTop(SqStack& S, ElemType& x) {
if (S.top == -1) {
return false;
}
x = S.data[S.top];
return true;
}
3.2 循环队列
3.2.1 队列的定义
#define MaxSize 5
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue;
3.2.2 初始化队列
void InitQueue(SqQueue& Q) {
Q.rear = Q.front = 0;//初始化时要为0
}
3.2.3 判空
bool isEmpty(SqQueue Q) {
if (Q.rear == Q.front) {//判空不需要为0,而初始化才需要为0
return true;
}
else {
return false;
}
}
3.2.4 入队
队满不入:
//入队
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;
}
3.2.5 出队
队空不出:
bool DeQueue(SqQueue& Q, ElemType& x) {
if (Q.front == Q.rear) {//队空不出
return false;
}
x = Q.data[Q.front];
Q.front = (Q.rear + 1) % MaxSize;
return true;
}