顺序栈和循环队列的定义,初始化,插入和删除操作函数的代码
时间: 2023-12-14 07:36:49 浏览: 76
顺序栈的定义、初始化、插入和删除操作函数的代码:
```c
// 定义顺序栈
#define MAXSIZE 100 // 假设栈的最大长度为100
typedef struct {
int data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *S) {
S->top = -1;
}
// 判断是否栈空
bool IsEmpty(SqStack S) {
if (S.top == -1) {
return true;
}
else {
return false;
}
}
// 判断是否栈满
bool IsFull(SqStack S) {
if (S.top == MAXSIZE - 1) {
return true;
}
else {
return false;
}
}
// 入栈
bool Push(SqStack *S, int x) {
if (IsFull(*S)) {
return false;
}
S->top++;
S->data[S->top] = x;
return true;
}
// 出栈
bool Pop(SqStack *S, int *x) {
if (IsEmpty(*S)) {
return false;
}
*x = S->data[S->top];
S->top--;
return true;
}
```
循环队列的定义、初始化、插入和删除操作函数的代码:
```c
// 定义循环队列
#define MAXSIZE 100 // 假设队列的最大长度为100
typedef struct {
int data[MAXSIZE]; // 存放队列中元素
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue *Q) {
Q->front = 0;
Q->rear = 0;
}
// 判断是否队空
bool IsEmpty(SqQueue Q) {
if (Q.front == Q.rear) {
return true;
}
else {
return false;
}
}
// 判断是否队满
bool IsFull(SqQueue Q) {
if ((Q.rear + 1) % MAXSIZE == Q.front) {
return true;
}
else {
return false;
}
}
// 入队
bool EnQueue(SqQueue *Q, int x) {
if (IsFull(*Q)) {
return false;
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return true;
}
// 出队
bool DeQueue(SqQueue *Q, int *x) {
if (IsEmpty(*Q)) {
return false;
}
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return true;
}
```
阅读全文