王道数据结构伪代码实现——第三章 栈和队列

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值