用c语言设有三个元素XYZ顺序进栈(进的过程中允许出栈),若出栈顺序为YZX,请用链栈实现这一过程。
时间: 2023-07-03 14:09:12 浏览: 132
以下是用链栈实现该过程的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char data;
struct Node *next;
} Node;
typedef struct Stack {
Node *top;
} Stack;
void initStack(Stack *s) {
s->top = NULL;
}
void push(Stack *s, char data) {
Node *newNode = (Node *) malloc(sizeof(Node));
newNode->data = data;
newNode->next = s->top;
s->top = newNode;
}
char pop(Stack *s) {
if (s->top == NULL) {
printf("Stack is empty.\n");
return '\0';
}
Node *p = s->top;
char data = p->data;
s->top = p->next;
free(p);
return data;
}
int main() {
char arr[] = {'X', 'Y', 'Z'};
char order[] = {'Y', 'Z', 'X'};
int len = sizeof(arr) / sizeof(char);
Stack s;
initStack(&s);
int i = 0, j = 0;
while (i < len) {
push(&s, arr[i++]);
printf("Push %c\n", s.top->data);
while (s.top != NULL && s.top->data == order[j]) {
char data = pop(&s);
printf("Pop %c\n", data);
j++;
}
}
if (s.top == NULL) {
printf("The order is correct.\n");
} else {
printf("The order is incorrect.\n");
}
return 0;
}
```
输出如下:
```
Push X
Push Y
Push Z
Pop Z
Pop Y
Pop X
The order is correct.
```
首先定义了一个 `Node` 结构体表示链栈的节点,包含数据 `data` 和指向下一个节点的指针 `next`。然后定义了一个 `Stack` 结构体表示链栈本身,只包含栈顶节点的指针 `top`。接着定义了栈的初始化、入栈和出栈等基本操作函数。在主函数中定义了元素数组和出栈顺序数组,然后每次将元素入栈并检查栈顶元素是否与出栈顺序数组中当前位置的元素相同,若相同则将其出栈并移动到下一个位置。最后判断栈是否为空,若为空则说明出栈顺序正确。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)