用C语言建立一个栈,编写一个程序是栈内元素倒置
时间: 2024-09-09 12:03:00 浏览: 53
在C语言中,我们可以使用数组或链表来实现一个基本的栈。这里我们以动态链表作为例子,因为链表更方便处理栈的插入和删除操作。以下是创建一个简单链表栈的基本结构以及倒置栈的操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构体
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化栈
StackNode* createStack() {
return (StackNode*)malloc(sizeof(StackNode));
}
// 入栈
void push(StackNode** top, int value) {
StackNode* newNode = createStack();
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 出栈并返回栈顶元素(若为空则返回0)
int pop(StackNode** top) {
if (*top == NULL) {
return 0; // 栈空
}
int value = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return value;
}
// 查看栈顶元素(不修改栈)
int peek(StackNode** top) {
if (*top == NULL) {
return 0; // 栈空
}
return (*top)->data;
}
// 主函数:倒置栈
void invertStack(StackNode** top) {
StackNode* current = *top;
StackNode* prev = NULL;
while (current != NULL) {
StackNode* nextTemp = current->next;
current->next = prev;
prev = current;
current = nextTemp;
}
*top = prev;
}
int main() {
StackNode* stackTop = NULL;
// 测试堆栈,添加一些元素
for (int i = 5; i >= 1; i--) {
push(&stackTop, i);
}
printf("Original Stack: ");
while (peek(&stackTop)) {
printf("%d ", pop(&stackTop));
}
printf("\n");
// 倒置栈
invertStack(&stackTop);
printf("Inverted Stack: ");
while (peek(&stackTop)) {
printf("%d ", pop(&stackTop));
}
printf("\n");
return 0;
}
```
在这个示例中,`push()`用于入栈,`pop()`用于出栈,`peek()`查看栈顶元素而不会改变它,`invertStack()`则是将整个栈倒置。
阅读全文