用队列实现字符串左移的方法用C语言实现
时间: 2024-12-13 20:21:49 浏览: 12
在C语言中,我们可以使用队列数据结构来实现字符串的左移操作。这里假设我们已经有一个队列能够支持元素的入队和出队操作。下面是一个简单的示例,展示了如何通过将字符逐个出队并插入队首来实现字符串左移:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义队列
typedef struct {
char* queue;
int front;
int rear;
int size;
} Queue;
// 初始化队列
Queue* init_queue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->queue = NULL;
q->front = -1;
q->rear = -1;
q->size = 0;
return q;
}
// 入队
void enqueue(Queue* q, char c) {
if(q->size == q->rear + 1) {
q->queue = realloc(q->queue, (q->size * 2) + sizeof(char));
}
q->queue[++q->rear] = c;
q->size++;
}
// 出队
char dequeue(Queue* q) {
if(q->front == -1) {
printf("Queue is empty.\n");
exit(1);
}
char c = q->queue[q->front++];
if(q->front > q->rear) {
free(q->queue);
q->queue = NULL;
q->front = q->rear = -1;
q->size = 0;
}
return c;
}
// 左移字符串
void left_rotate_string(Queue* q, int rotations) {
for(int i = 0; i < rotations && q->front != q->rear; i++) {
char temp = dequeue(q);
enqueue(q, temp);
}
}
int main() {
Queue* q = init_queue();
char str[] = "Hello, World!";
int len = strlen(str);
// 将字符串中的每个字符入队
for(int i = 0; i < len; i++) {
enqueue(q, str[i]);
}
// 指定旋转次数
int rotations = 2;
// 左移字符串
left_rotate_string(q, rotations);
// 输出结果
while(!queue_empty(q)) {
printf("%c", dequeue(q));
}
free(q);
return 0;
}
```
在这个程序中,`left_rotate_string`函数会根据给定的旋转次数对队列内的字符进行左移。注意,这只是一个简化的实现,实际应用中需要处理队列溢出的情况。
阅读全文