C 实验二 栈和队列 一、用C语言编程实现建立一个顺序栈,并完成以下操作: 1)初始化栈 2)通过键盘读取元素实现进栈操作。(从键盘接受元素个数n以及n个整型数) 3)实现元素出栈操作,并打印出输出元素。 二、用C语言编程实现建立一个顺序队列,并完成以下操作: 1)通过键盘读取元素实现入队操作。(从键盘接受元素个数n以及n个整型数) 2)实现元素出队操作,并打印出输出元素。 3)获取队首元素。 4)判断队列是否为空。 5)清空队列。
时间: 2023-12-10 10:41:55 浏览: 93
以下是栈和队列的C语言代码实现:
1. 建立一个顺序栈
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 栈的最大容量
typedef struct {
int data[MAXSIZE]; // 存储数据的数组
int top; // 栈顶指针
} SqStack;
// 初始化栈
void initStack(SqStack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(SqStack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(SqStack *s) {
return s->top == MAXSIZE - 1;
}
// 进栈操作
void push(SqStack *s, int x) {
if (isFull(s)) {
printf("栈已满,无法再进栈!\n");
return;
}
s->top++;
s->data[s->top] = x;
}
// 出栈操作
int pop(SqStack *s) {
if (isEmpty(s)) {
printf("栈已空,无法出栈!\n");
return -1;
}
int x = s->data[s->top];
s->top--;
return x;
}
// 打印栈中元素
void printStack(SqStack *s) {
printf("栈中元素为:");
for (int i = s->top; i >= 0; i--) {
printf("%d ", s->data[i]);
}
printf("\n");
}
int main() {
SqStack s;
initStack(&s);
int n, x;
printf("请输入要进栈的元素个数:");
scanf("%d", &n);
printf("请输入%d个整型数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
push(&s, x);
}
printStack(&s);
printf("出栈一个元素:%d\n", pop(&s));
printStack(&s);
return 0;
}
```
2. 建立一个顺序队列
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 队列的最大容量
typedef struct {
int data[MAXSIZE]; // 存储数据的数组
int front, rear; // 队首和队尾指针
} SqQueue;
// 初始化队列
void initQueue(SqQueue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(SqQueue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isFull(SqQueue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
// 入队操作
void enQueue(SqQueue *q, int x) {
if (isFull(q)) {
printf("队列已满,无法再入队!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
}
// 出队操作
int deQueue(SqQueue *q) {
if (isEmpty(q)) {
printf("队列已空,无法出队!\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return x;
}
// 获取队首元素
int getFront(SqQueue *q) {
if (isEmpty(q)) {
printf("队列为空,无法获取队首元素!\n");
return -1;
}
return q->data[q->front];
}
// 清空队列
void clearQueue(SqQueue *q) {
q->front = q->rear = 0;
}
int main() {
SqQueue q;
initQueue(&q);
int n, x;
printf("请输入要入队的元素个数:");
scanf("%d", &n);
printf("请输入%d个整型数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
enQueue(&q, x);
}
printf("队首元素为:%d\n", getFront(&q));
printf("出队一个元素:%d\n", deQueue(&q));
printf("队首元素为:%d\n", getFront(&q));
clearQueue(&q);
printf("队列已清空!\n");
return 0;
}
```
阅读全文