写出无头的链式栈的出队和入队操作
时间: 2024-06-03 20:07:21 浏览: 57
无头的链式栈是指没有头结点的链式栈,入栈操作就是在链表头部插入元素,出栈操作就是从链表头部删除元素。
入栈操作:
1. 创建一个新的节点,将元素值存入节点中;
2. 如果链表为空,将新节点作为头结点;
3. 如果链表不为空,将新节点插入到链表头部。
出栈操作:
1. 如果链表为空,返回空值;
2. 如果链表不为空,将链表头部节点删除,并返回节点中的元素值。
相关问题
写出无头的链式栈的出队和入队操作的代码
无头的链式栈出队操作:
```python
def pop(self):
if self.is_empty():
return None
else:
data = self.top.data
self.top = self.top.next
return data
```
无头的链式栈入队操作:
```python
def push(self, data):
new_node = Node(data)
if self.is_empty():
self.top = new_node
else:
new_node.next = self.top
self.top = new_node
```
用c写一个入队和出队栈
这里提供两种实现方式:一种是用两个栈实现队列,另一种是用一个栈实现队列。
1. 用两个栈实现队列
```
#include <stdio.h>
#define MAX_SIZE 10
int stack1[MAX_SIZE];
int top1 = -1;
int stack2[MAX_SIZE];
int top2 = -1;
void push(int data) {
if (top1 == MAX_SIZE - 1) {
printf("Stack Overflow!\n");
return;
}
stack1[++top1] = data;
}
int pop() {
if (top1 == -1 && top2 == -1) {
printf("Stack Underflow!\n");
return -1;
}
if (top2 == -1) {
while (top1 != -1) {
stack2[++top2] = stack1[top1--];
}
}
return stack2[top2--];
}
int main() {
push(1);
push(2);
push(3);
printf("%d\n", pop());
push(4);
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", pop());
return 0;
}
```
2. 用一个栈实现队列
```
#include <stdio.h>
#define MAX_SIZE 10
int stack[MAX_SIZE];
int top = -1;
void push(int data) {
if (top == MAX_SIZE - 1) {
printf("Stack Overflow!\n");
return;
}
stack[++top] = data;
}
int pop() {
if (top == -1) {
printf("Stack Underflow!\n");
return -1;
}
int data = stack[0];
for (int i = 0; i < top; i++) {
stack[i] = stack[i + 1];
}
top--;
return data;
}
int main() {
push(1);
push(2);
push(3);
printf("%d\n", pop());
push(4);
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", pop());
return 0;
}
```