任务二:编写C程序,实现链栈的下列功能: 1、依次进栈数据为1,2,3,4,5,再全部出栈,输出出栈序列。 2、先进栈3,2,1,出栈2次,再进栈4,5,6,7,再全部出栈,输出每次入栈和出栈序列。
时间: 2024-10-19 11:11:38 浏览: 29
链栈的进栈程序-c语言 栈的顺序和链式实现代码ppt
为了实现链栈并完成这两个任务,你可以创建一个简单的链表结构作为栈的数据结构,包含一个节点和指向下一个节点的指针。下面是一个基本的C程序,使用`struct Node`表示链栈节点,并实现了`push`, `pop`, 和`display_stack`函数来实现所需的功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化一个新的链栈头部
StackNode* initStack() {
return (StackNode*)malloc(sizeof(StackNode));
}
// 向链栈添加元素
void push(StackNode** top, int value) {
StackNode* newNode = initStack();
if (newNode == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 从链栈移除并返回顶部元素,如果栈为空则返回0
int pop(StackNode** top) {
if (*top == NULL) {
return 0;
}
StackNode* temp = *top;
int value = temp->data;
*top = temp->next;
free(temp);
return value;
}
// 显示链栈中的元素
void display_stack(StackNode* top) {
StackNode* current = top;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
// 任务一:依次进栈1,2,3,4,5,再全部出栈
StackNode* stackTop = initStack();
push(&stackTop, 1);
push(&stackTop, 2);
push(&stackTop, 3);
push(&stackTop, 4);
push(&stackTop, 5);
printf("After pushing 1, 2, 3, 4, 5:\n");
display_stack(stackTop); // 输出出栈序列
while (!stackEmpty(stackTop)) { // 函数假设有一个名为stackEmpty的辅助函数检查栈是否空
printf("%d ", pop(&stackTop)); // 全部出栈并打印每个元素
}
printf("\n");
// 任务二:先入栈3,2,1,出栈2次,再入栈4,5,6,7,再全部出栈
push(&stackTop, 3);
push(&stackTop, 2);
push(&stackTop, 1);
printf("After pushing 3, 2, 1:\n");
display_stack(stackTop); // 输出此时栈的状态
for (int i = 1; i <= 2; ++i) {
if (pop(&stackTop)) {
printf("Popped element %d\n", pop(&stackTop));
} else {
break;
}
}
printf("After popping twice:\n");
display_stack(stackTop);
push(&stackTop, 4);
push(&stackTop, 5);
push(&stackTop, 6);
push(&stackTop, 7);
printf("After pushing 4, 5, 6, 7:\n");
display_stack(stackTop);
while (!stackEmpty(stackTop)) {
printf("%d ", pop(&stackTop));
}
printf("\n");
return 0;
}
```
这个程序首先定义了链栈的基本操作,然后在主函数中按照题目描述进行了两次栈操作。
阅读全文