`peek()`函数的原型如下:
```c
#include
#include
#define MAX_SIZE 100
typedef struct Queue {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
typedef struct Stack {
int data[MAX_SIZE];
int top;
} Stack;
int peek(Queue *q);
int peek(Stack *s);
```
在这个示例中,我们定义了两个结构体:`Queue`和`Stack`,分别表示队列和栈。每个结构体都有一个整型数组`data`,用于存储元素,以及两个整型变量`front`和`rear`,分别表示队列或栈的头部和尾部索引。
接下来,我们实现了`peek()`函数。对于队列,我们需要检查`front`和`rear`之间的边界条件,以确保没有越界访问。对于栈,我们只需要检查`top`是否小于等于`rear`,以确保栈顶元素未被覆盖。如果满足条件,我们返回顶部元素的值;否则,返回-1表示错误。
以下是使用`peek()`函数的示例代码:
```c
#include
#include
#include "queue.h"
#include "stack.h"
int main() {
Queue q;
Stack s;
int n, i;
// 初始化队列和栈
q.front = q.rear = 0;
s.top = -1;
printf("请输入要入队的元素个数:");
scanf("%d", &n);
printf("请输入%d个元素:", n);
for (i = 0; i < n; i++) {
int temp;
scanf("%d", &temp);
q.data[q.rear++] = temp; // 将元素入队到队列尾部
}
q.rear--; // 因为最后一个元素已经入队,所以需要将队列尾部指针回退一位
printf("队列中的元素为:");
for (i = q.front; i != q.rear; i = (i + 1) % MAX_SIZE) { // 从队列头部开始遍历并打印元素值
printf("%d ", q.data[i]);
}
printf("%d\n", q.data[i]); // 由于循环结束时i会变成rear,所以需要单独打印最后一个元素的值
s.data[++s.top] = 10; // 将10压入栈顶
s.data[++s.top] = 20; // 将20压入栈顶
s.data[++s.top] = 30; // 将30压入栈顶
s.data[++s.top] = 40; // 将40压入栈顶
s.data[++s.top] = 50; // 将50压入栈顶
s.data[++s.top] = 60; // 将60压入栈顶
s.data[++s.top] = 70; // 将70压入栈顶
s.data[++s.top] = 80; // 将80压入栈顶
s.data[++s.top] = 90; // 将90压入栈顶
s.data[++s.top] = 100; // 将100压入栈顶,此时栈已满,无法再压入新元素,但仍然可以查看栈顶元素的值(即90)
s.top--; // 因为最后一个元素已经入栈,所以需要将栈顶指针回退一位,以便后续使用peek()函数查看栈顶元素的值(即90)
printf("栈中的元素为:");
for (i = s.top; i != -1; i = (i + stack_size) % MAX_SIZE) { // 从栈顶开始遍历并打印元素值(注意这里的循环条件应该是i != stack_size,而不是i != rear)
printf("%d ", s.data[i]);
}
printf("\n");
}
```
以上关于peek() c语言-PEEK百家百科内容为上海春毅新材料原创,请勿转载!