实现顺序栈和循环队列的代码
时间: 2023-05-22 09:02:56 浏览: 82
好的,下面是实现顺序栈和循环队列的代码:
顺序栈的实现:
```
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
}SqStack;
void InitStack(SqStack *S) // 初始化栈
{
S->top = -1;
}
bool Push(SqStack *S, int x) // 入栈操作
{
if(S->top == MAXSIZE-1) // 栈已满
{
return false;
}
S->data[++S->top] = x; // 入栈
return true;
}
bool Pop(SqStack *S, int *x) // 出栈操作
{
if(S->top == -1) // 栈为空
{
return false;
}
*x = S->data[S->top--]; // 出栈
return true;
}
bool GetTop(SqStack S, int *x) // 获取栈顶元素
{
if(S.top == -1) // 栈为空
{
return false;
}
*x = S.data[S.top]; // 获取栈顶元素
return true;
}
```
循环队列的实现:
```
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
}SqQueue;
void InitQueue(SqQueue *Q) // 初始化队列
{
Q->front = Q->rear = 0;
}
bool EnterQueue(SqQueue *Q, int x) // 入队操作
{
if((Q->rear+1)%MAXSIZE == Q->front) // 队列已满
{
return false;
}
Q->data[Q->rear] = x; // 入队
Q->rear = (Q->rear+1)%MAXSIZE; // 队尾指针后移
return true;
}
bool DeleteQueue(SqQueue *Q, int *x) // 出队操作
{
if(Q->front == Q->rear) // 队列为空
{
return false;
}
*x = Q->data[Q->front]; // 出队
Q->front = (Q->front+1)%MAXSIZE; // 队头指针后移
return true;
}
bool GetHead(SqQueue Q, int *x) // 获取队头元素
{
if(Q.front == Q.rear) // 队列为空
{
return false;
}
*x = Q.data[Q.front]; // 获取队头元素
return true;
}
```