使用带有头节点的单链表来实现堆栈的存储,并在该物理结构上,实现堆栈的创建、判空、出栈、入栈等操作 提示:在非递归方法中,可采用堆栈的入栈方法存储当前访问结点的父结点,采用出栈的方法获得当前访问结点的父结点。使用c语言写一个程序
时间: 2024-09-25 08:20:19 浏览: 29
实验二 堆栈和队列基本操作的编程实现
5星 · 资源好评率100%
在C语言中,我们可以使用带头节点的单链表作为堆栈的数据结构,因为堆栈的操作(push、pop、top和empty)可以通过对链表头部元素的操作来实现。以下是简单的实现步骤:
1. 创建堆栈:
```c
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 创建堆栈
StackNode* createStack() {
StackNode* stack = (StackNode*)malloc(sizeof(StackNode));
stack->next = NULL;
stack->data = -1; // 标记空栈
return stack;
}
```
2. 判空:
```c
int isEmpty(StackNode* top) {
return top == NULL || top->data == -1;
}
```
3. 入栈(即压栈):
```c
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
```
4. 出栈(即弹栈):
```c
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;
}
```
5. 获取栈顶元素(查看但不删除):
```c
int top(StackNode* top) {
if (isEmpty(top)) {
printf("Stack is empty.\n");
return -1;
}
return (*top)->data;
}
```
请注意,这个实现假设当堆栈为空时,`top`指向的是头节点。实际应用中,为了更清晰地表示堆栈为空,可以将头节点的数据设置为特殊值,如-1。
阅读全文