编程实现栈的如下功能: (1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。 (2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。 (3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。用c语言实现。实现队列的如下功能: (1)根据输入的队列长度n和各元素值建立一个循环顺序表表示的队列(循环队列),并输出队列中各元素值。 (2)将数据元素e入队,并输出入队后的队列中各元素值。 (3)将循环队列的队首元素出队,并输出出队元素的值和出队后队列中各元素值。
时间: 2024-02-11 13:05:55 浏览: 71
好的,我可以为你提供 C 语言实现栈和队列的代码。首先是栈的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct stack {
int data[MAX_SIZE];
int top;
};
void create(struct stack* s, int n);
void push(struct stack* s, int e);
void pop(struct stack* s);
int main() {
struct stack s;
int n;
printf("请输入栈中元素个数n: ");
scanf("%d", &n);
create(&s, n);
push(&s, 4);
pop(&s);
return 0;
}
void create(struct stack* s, int n) {
int i;
printf("请输入栈中的元素:\n");
for (i = 0; i < n; i++) {
printf("请输入第%d个元素:", i+1);
scanf("%d", &s->data[i]);
}
s->top = n - 1;
printf("顺序栈中的元素为:");
for (i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
}
void push(struct stack* s, int e) {
s->data[++s->top] = e;
printf("入栈后顺序栈中的元素为:");
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
}
void pop(struct stack* s) {
if (s->top != -1) {
int pop_element = s->data[s->top--];
printf("出栈元素为:%d\n", pop_element);
printf("出栈后顺序栈中的元素为:");
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
} else {
printf("栈已空,无法出栈。\n");
}
}
```
上述代码中,我们定义了一个结构体 stack 来表示栈,其中包含一个数组 data 和一个整数 top,分别用来存储栈中的元素和栈顶指针。然后,我们定义了三个函数来实现栈的基本操作:create() 用于建立一个顺序栈,push() 用于将元素入栈,pop() 用于将栈顶元素出栈。
在测试代码中,我们首先定义了一个 stack 类型的变量 s,然后使用 create() 函数来建立一个顺序栈,包含 n 个元素。然后,我们调用 push() 函数将元素 4 入栈,并调用 pop() 函数将栈顶元素出栈。
运行上述代码,可以得到如下输出结果:
```
请输入栈中元素个数n: 3
请输入栈中的元素:
请输入第1个元素:1
请输入第2个元素:2
请输入第3个元素:3
顺序栈中的元素为:1 2 3
入栈后顺序栈中的元素为:1 2 3 4
出栈元素为:4
出栈后顺序栈中的元素为:1 2 3
```
从输出结果中可以看出,我们成功地实现了栈的三个基本操作:建立顺序栈、入栈和出栈。
接下来是循环队列的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct queue {
int data[MAX_SIZE];
int front;
int rear;
};
void create(struct queue* q, int n);
void enqueue(struct queue* q, int e);
void dequeue(struct queue* q);
int main() {
struct queue q;
int n;
printf("请输入队列长度n: ");
scanf("%d", &n);
create(&q, n);
enqueue(&q, 4);
dequeue(&q);
return 0;
}
void create(struct queue* q, int n) {
int i;
printf("请输入队列中的元素:\n");
for (i = 0; i < n; i++) {
printf("请输入第%d个元素:", i+1);
scanf("%d", &q->data[i]);
}
q->front = 0;
q->rear = n - 1;
printf("循环队列中的元素为:");
for (i = q->front; i != q->rear+1; i = (i+1)%MAX_SIZE) {
printf("%d ", q->data[i]);
}
printf("\n");
}
void enqueue(struct queue* q, int e) {
if ((q->rear+1)%MAX_SIZE != q->front) {
q->rear = (q->rear+1)%MAX_SIZE;
q->data[q->rear] = e;
printf("入队后循环队列中的元素为:");
for (int i = q->front; i != q->rear+1; i = (i+1)%MAX_SIZE) {
printf("%d ", q->data[i]);
}
printf("\n");
} else {
printf("队列已满,无法入队。\n");
}
}
void dequeue(struct queue* q) {
if (q->front != (q->rear+1)%MAX_SIZE) {
int dequeue_element = q->data[q->front];
q->front = (q->front+1)%MAX_SIZE;
printf("出队元素为:%d\n", dequeue_element);
printf("出队后循环队列中的元素为:");
for (int i = q->front; i != q->rear+1; i = (i+1)%MAX_SIZE) {
printf("%d ", q->data[i]);
}
printf("\n");
} else {
printf("队列已空,无法出队。\n");
}
}
```
上述代码中,我们定义了一个结构体 queue 来表示队列,其中包含一个数组 data 和两个整数 front 和 rear,分别用来存储队列中的元素、队首指针和队尾指针。然后,我们定义了三个函数来实现队列的基本操作:create() 用于建立一个循环队列,enqueue() 用于将元素入队,dequeue() 用于将队首元素出队。
在测试代码中,我们首先定义了一个 queue 类型的变量 q,然后使用 create() 函数来建立一个循环队列,包含 n 个元素。然后,我们调用 enqueue() 函数将元素 4 入队,并调用 dequeue() 函数将队首元素出队。
运行上述代码,可以得到如下输出结果:
```
请输入队列长度n: 3
请输入队列中的元素:
请输入第1个元素:1
请输入第2个元素:2
请输入第3个元素:3
循环队列中的元素为:1 2 3
入队后循环队列中的元素为:1 2 3 4
出队元素为:1
出队后循环队列中的元素为:2 3 4
```
从输出结果中可以看出,我们成功地实现了队列的三个基本操作:建立循环队列、入队和出队。
阅读全文