使用栈与队列逐个处理字符串中的每个字符 将line中的字符依次入栈,然后输出栈中元素个数与栈顶元素。 输入一个字符x(待删除字符)。然后将栈中元素依次出栈并输出,出栈时将不等于x的字符依次入队列,以空格分隔。 输出队列元素个数,队头与队尾,以空格分隔。 最后输出队列中所有元素。
时间: 2024-09-30 15:03:05 浏览: 83
算法_栈与队列_删除字符串中的所有相邻重复项(csdn)————程序.pdf
在C语言中,我们可以使用`stack`(栈)和`queue`(队列)数据结构来实现这个功能。首先,我们需要定义这两个数据结构,并使用`stdlib.h`库提供的`malloc`、`free`函数以及`stdio.h`库进行输入输出操作。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
char data;
struct Node* next;
} StackElement, *Stack;
typedef struct Queue {
StackElement* front;
StackElement* rear;
} Queue, *QueueElement;
// 初始化栈
Stack initStack() {
Stack stack = malloc(sizeof(StackElement));
stack->next = NULL;
return stack;
}
// 入栈
void push(Stack* stack, char data) {
StackElement* newNode = (StackElement*)malloc(sizeof(StackElement));
newNode->data = data;
newNode->next = stack->next;
stack->next = newNode;
}
// 出栈
char pop(Stack* stack) {
if (stack->next == NULL)
return '\0';
StackElement* top = stack->next;
char data = top->data;
stack->next = top->next;
free(top);
return data;
}
// 初始化队列
Queue initQueue() {
Queue queue = (Queue){NULL, NULL};
return queue;
}
// 入队
void enqueue(Queue* queue, char data) {
StackElement* newNode = (StackElement*)malloc(sizeof(StackElement));
newNode->data = data;
newNode->next = queue->rear;
queue->rear = newNode;
if (queue->front == NULL)
queue->front = newNode;
}
// 出队
char dequeue(Queue* queue) {
if (queue->front == NULL)
return '\0';
StackElement* front = queue->front;
char data = front->data;
queue->front = front->next;
if (queue->front == NULL)
queue->rear = NULL;
free(front);
return data;
}
int main() {
char line[100], x;
Stack stack = initStack();
Queue queue = initQueue();
printf("请输入一个字符串: ");
fgets(line, sizeof(line), stdin);
for (size_t i = 0; line[i] != '\0'; i++) {
push(stack, line[i]);
// 出栈并判断是否等于x
while ((x = pop(stack)) != '\0') {
if (x != getchar()) { // 非x字符入队
enqueue(&queue, x);
}
}
}
printf("栈中元素个数: %zu, 栈顶元素: %c\n", stack->next ? 1 : 0, pop(stack)); // 如果栈非空,则有1个元素,否则为空
int queueSize = queue.front ? 1 : 0;
printf("队列元素个数: %d\n", queueSize);
while (queueSize--) {
char data = dequeue(&queue);
printf("%c ", data);
}
printf("\n队列队头: %c, 队尾: %c\n", queue.front ? queue.front->data : '\0', queue.rear ? queue.rear->data : '\0');
return 0;
}
```
这个程序首先读取一行字符串,然后遍历每个字符。将字符入栈,同时出栈的字符如果不等于输入的目标字符x,则入队。最后,输出栈中元素个数和栈顶元素,队列元素个数,队头与队尾,以及队列的所有元素。
阅读全文