1. 请编程实现栈的基本操作,主要包括栈的创建、压栈栈和弹栈等基本操作。c
时间: 2024-10-18 14:16:43 浏览: 46
C语言对栈的实现基本操作
在C语言中,我们可以使用数组或链表来实现栈的数据结构。这里是一个简单的链表栈的实现例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化空栈
StackNode* createStack() {
StackNode* stack = (StackNode*)malloc(sizeof(StackNode));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->next = NULL;
return stack;
}
// 判断栈是否为空
int isEmpty(StackNode* top) {
return top == NULL;
}
// 入栈操作(压栈)
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 出栈操作(弹栈)
int pop(StackNode** top) {
if (isEmpty(*top)) {
printf("Stack is empty.\n");
return -1; // 返回一个错误码表示栈已空
}
int poppedValue = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return poppedValue;
}
// 打印栈顶元素
void peek(StackNode* top) {
if (isEmpty(top)) {
printf("Stack is empty.\n");
} else {
printf("Top element: %d\n", top->data);
}
}
int main() {
StackNode* stack = createStack();
push(&stack, 5);
push(&stack, 10);
push(&stack, 15);
printf("After pushing:\n");
peek(stack);
printf("%d was popped.\n", pop(&stack));
printf("Peek after popping: %d\n", peek(stack));
return 0;
}
```
这个程序首先定义了一个栈节点结构,然后实现了创建空栈、判断栈是否为空、入栈(压栈)、出栈(弹栈)以及查看栈顶元素的操作。在`main`函数中展示了如何使用这些操作。
阅读全文