用c语言编写链栈依次进栈数据为 3,2,1,再出栈2次,输出入栈和出栈结果,再入栈4,5,6,7,再全部出栈,输出入栈和出栈结果
时间: 2023-08-05 19:04:10 浏览: 79
C语言进制装换,栈的入栈出栈
好的,下面是用C语言编写的链栈代码,实现了上述操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 初始化链栈,返回栈顶指针
Node *initStack() {
Node *top = (Node *)malloc(sizeof(Node));
top->next = NULL;
return top;
}
// 入栈操作,将元素x插入到栈顶
void push(Node *top, int x) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = x;
node->next = top->next;
top->next = node;
}
// 出栈操作,返回栈顶元素并删除
int pop(Node *top) {
if (top->next == NULL) {
printf("Stack is empty!\n");
return -1;
}
Node *node = top->next;
int x = node->data;
top->next = node->next;
free(node);
return x;
}
// 打印栈中元素
void printStack(Node *top) {
printf("Stack: ");
Node *p = top->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 初始化链栈
Node *top = initStack();
// 入栈3,2,1
push(top, 3);
push(top, 2);
push(top, 1);
printf("Push 3, 2, 1:\n");
printStack(top);
// 出栈2次
int x = pop(top);
printf("Pop %d:\n", x);
x = pop(top);
printf("Pop %d:\n", x);
printf("After pop 2 times:\n");
printStack(top);
// 入栈4,5,6,7
push(top, 4);
push(top, 5);
push(top, 6);
push(top, 7);
printf("Push 4, 5, 6, 7:\n");
printStack(top);
// 出栈所有元素
printf("Pop all elements:\n");
while (top->next != NULL) {
x = pop(top);
printf("Pop %d:\n", x);
}
printStack(top);
return 0;
}
```
输出结果如下:
```
Push 3, 2, 1:
Stack: 1 2 3
Pop 1:
Pop 2:
After pop 2 times:
Stack: 3
Push 4, 5, 6, 7:
Stack: 7 6 5 4 3
Pop all elements:
Pop 7:
Pop 6:
Pop 5:
Pop 4:
Pop 3:
Stack:
```
其中,入栈的操作使用 `push` 函数实现,出栈的操作使用 `pop` 函数实现,打印栈中元素使用 `printStack` 函数实现。在主函数中,我们按照题目要求进行了入栈、出栈,并输出了结果。
阅读全文