嘿,伙伴们!今天给大家带来一档超级实用且有趣的编程秘籍——用队列玩转密码加密解密!你是不是一直觉得加密和解密那点事儿又麻烦又枯燥?别急别急,C语言的队列绝对能帮你变身密码大师,一战成“聪”!快点准备好你的编程装备,让我们一起开启这场“队列风暴”吧!
## 1. 为什么选队列?优势大揭秘!
是不是有人会左右摇头:哎呀,用队列会不会太“古董”了?其实不然!队列操作简单,特别适合流式处理,比如字符流的加密解密,避免复杂的索引运算和多余的数组复制。同时,队列还能帮你串联每个字符的处理流程,让整个程序看着顺眼、运行快活。
## 2. 队列的基本框架
在C语言中实现队列,咱们可以用数组或者链表。这里推荐用链表实现,更加灵活,不怕溢出。基本结构如下:
```c
typedef struct Node {
char data;
struct Node *next;
} Node;
typedef struct Queue {
Node *front;
Node *rear;
} Queue;
```
创建队列、入队、出队、判空四个基本操作必不可少。让我们逐个看过来:
- **队列创建**:初始化队列,front和rear都指向NULL。
- **入队(Enqueue)**:new一个新节点,把它加到队尾,同时更新rear指针。
- **出队(Dequeue)**:把队头节点弹出,返回里面的字符,更新front指针。
## 3. 密码加密和解密的“队列魔法”
想象一下,用队列操作字符,就像用“排队”的方式给密码加码。比如,我们可以设计一种简单的“偏移加密”——每个字符向后偏移3个字符(A变D,B变E……),解密时反方向偏移。
步骤如下:
1. 把要加密的字符串逐个字符入队。
2. 逐个出队,偏移字符后再入队到一个新队列(或者直接转换存储)中。
3. 最后,将队列中字符依次输出,即为密文。
解密步奏类似,只不过偏移方向相反。
## 4. 代码示范:用队列实现字符偏移加密
```c
#include
#include
#include
typedef struct Node {
char data;
struct Node *next;
} Node;
typedef struct Queue {
Node *front;
Node *rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = NULL;
}
int isEmpty(Queue *q) {
return q->front == NULL;
}
void enqueue(Queue *q, char data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (q->rear == NULL) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
char dequeue(Queue *q) {
if (isEmpty(q)) return '\0';
Node *temp = q->front;
char data = temp->data;
q->front = temp->next;
if (q->front == NULL) q->rear = NULL;
free(temp);
return data;
}
void encrypt(const char *input, char *output, int shift) {
Queue q;
initQueue(&q);
int len = strlen(input);
for (int i = 0; i < len; i++) {
enqueue(&q, input[i]);
}
int index = 0;
while (!isEmpty(&q)) {
char ch = dequeue(&q);
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
ch = ch + shift;
if (ch > 'z') ch -= 26;
if (ch > 'Z' && ch < 'a') ch -= 26;
}
output[index++] = ch;
}
output[index] = '\0';
}
void decrypt(const char *input, char *output, int shift) {
encrypt(input, output, -shift); // 利用对称性反向偏移
}
int main() {
char plaintext[] = "HelloWorld";
char encrypted[100], decrypted[100];
int shift = 3;
printf("原文:%s\n", plaintext);
encrypt(plaintext, encrypted, shift);
printf("加密后:%s\n", encrypted);
decrypt(encrypted, decrypted, shift);
printf("解密后:%s\n", decrypted);
return 0;
}
```
这段代码用队列把字符逐个处理,偏移后生成密文,解密时用偏移相反的值把密码变成露出原形的小萌物。
## 5. 广告时间!想要变得更强?玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink
## 6. 你以为就这么简单?别小看队列的魔力!
其实,队列还能用在多线程同步、任务调度、多级缓存等等,都是搞事情的绝佳武器。就像网友说的:“队列,你不懂我不怪你。”其实你只需记住一点:有条理,排队有序,效率爆表!
想不想到后面还可以用队列加上哈希、树结构搞点复杂密码?或者弄个加密解密迷宫小游戏?你说呢?不跟你讲了,先动起来试试吧!
不过,别忘了,If你觉得这篇小课程还不错,记得去玩游戏赚点零花钱,网址就是bbs.77.ink!继续牛逼哄哄地炫耀你的程序天赋,别忘了带上你的队列“秘籍”哦!