user-0 提问: 请求大佬帮忙解题，有关使用队列实现密码加密

回复:
user: user-0
content: 谢谢大佬的指点。

user: user-1
content: #include <iostream> #include <cstring>  using namespace std;   int main(void) {     char src[32], key[32];     int i, j;     int key_len;      cout<<"Please input context: ";     cin>>src;     cout<<"Please input key: ";     cin>>key;      key_len = strlen(key);      i = j = 0;     while (src[i]) {         src[i] += key[j % key_len] - '0';         i++;         j++;     }      cout<<src<<endl;     return 0; } 这是不用队列的方法。  其实用一个循环链表存放key是比较好的，减少了频繁调用malloc和free

user: user-1
content: #include <iostream> #include <cstdlib> using namespace std; #include <string.h>  typedef char DataType; typedef struct node *QueueData;  //队列数据元素结构 struct node {     DataType info;     struct node *next; };  typedef struct queueRecord {     QueueData  front, rear ; } LINKQUEUE;  typedef struct queueRecord *PLinkQueue;  PLinkQueue createEmptyQueue_link( ) {     //创建一个空队列，实质：生成一个LINKQUEUE类型的结点，并给front 和 rear 成员赋值     //请在此处填写代码，完成相应功能     /*-------begin----------*/     PLinkQueue plqu;     plqu = (PLinkQueue)malloc(sizeof(struct queueRecord));     if(plqu!=NULL)     {         plqu->front=NULL;         plqu->rear=NULL;     }     else         cout<<"Out of space"<<endl;     return plqu;     /*-------end----------*/ }  int isEmptyQueue_link(PLinkQueue  queue) {     //判定队列是否为空，实质： 看队列的front指针是否为空，若为空，则队列为空      //请在此处填写代码，完成相应功能     /*-------begin----------*/      return (queue->front==NULL);      /*-------end----------*/ }  void enQueue_link(DataType x, PLinkQueue queue) {     //将数据元素x插入队尾。实质：生成一个struct node类型的结点，并给相应成员赋值后插入队尾     //请在此处填写代码，完成相应功能     /*-------begin----------*/     QueueData p;     p=(QueueData)malloc(sizeof(struct node));     if(p==NULL) {         cout<<"OUt OF PEACE" ;         return;     }     //else     //{     p->info = x;     p->next=NULL;     if( queue->front==NULL)         queue->front = p;     else         queue->rear->next = p;     queue->rear=p;      //}      /*-------end----------*/ }  void qqenQueue_link(QueueData *p,PLinkQueue Q) {     //本函数的功能是将 struct node 类型的结点插入队尾，与enQueue_link(DataType x, PLinkQueue queue)的区别是，不需要生成结点      //请在此处填写代码，完成相应功能     /*-------begin----------*/        /*-------end----------*/  }  DataType deQueue_link(PLinkQueue Q) {     //出队，实质： 取出Q队列的队首结点，返回该结点的数据元素，并将该结点使用enQueue_link(QueueData *p,PLinkQueue Q)插入队尾     //本函数为针对本实验特殊设计，可实现秘钥的循环使用     //请在此处填写代码，完成相应功能     /*-------begin----------*/     QueueData p;     DataType info;     if(Q->front==NULL){         cout<<"Empty queue."<<endl;         return -1;     }     //else     //{     p = Q->front;     info = p->info;     Q->front = p->next;      free(p);     //}       return info;     /*-------end----------*/ }  void decrypt(char src[], char key[], char dest[]) {     /*  参数： src 放的是源文 ； key 放的是秘钥 ； dest 放加密后的密文         加密函数： 步骤提示         1. 初始化一个空队列Q         2. 将key数组的元素逐个插入队列Q         3. 逐个访问src数组的源文，并加密， 使用deQueue_link(Q)函数可得到队首秘钥，并使秘钥循环使用         */     PLinkQueue p;     int i;     char m;      p = createEmptyQueue_link();     //while(i=0, key[i]!='\0', i++)     for (i=0; key[i]!='\0'; i++)     {         enQueue_link(key[i]-'0',p);   //注意输入的是字符串"2345", 要转成数字2345     }     //while(i=0, src[i]!='\0' ,i++)     for (i=0; src[i]!='\0'; i++)     {         m = deQueue_link(p);         dest[i] = src[i] + m;         enQueue_link(m,p);     }  }  int main(void) {     char src[80] , key[20], dest[80] ;      cin>>src ;      cin>>key;     decrypt(src , key , dest);     cout<<dest<<endl; }  供参考～  没必要搞这个麻烦，用一个数组存放秘钥就可以了。

user: user-0
content: 请帮忙看看代码哪出错了，输出不了题目要求

user: user-0
content: #include <iostream> using namespace std; #include <string.h>  typedef char DataType; typedef struct node *QueueData; //队列数据元素结构 struct node {   DataType info;   struct node *next; };  typedef struct queueRecord {   QueueData  front, rear ; } LINKQUEUE;  typedef struct queueRecord *PLinkQueue;  PLinkQueue createEmptyQueue_link( ) {   //创建一个空队列，实质：生成一个LINKQUEUE类型的结点，并给front 和 rear 成员赋值   //请在此处填写代码，完成相应功能   /*-------begin----------*/   PLinkQueue plqu;   plqu=(PLinkQueue)malloc(sizeof(struct queueRecord));   if(plqu!=NULL)   {     plqu->front=NULL;     plqu->rear=NULL;   }   else     cout<<"Out of space"<<endl;   return plqu;     /*-------end----------*/  }  int isEmptyQueue_link(PLinkQueue  queue) {   //判定队列是否为空，实质： 看队列的front指针是否为空，若为空，则队列为空    //请在此处填写代码，完成相应功能   /*-------begin----------*/    return (queue->front==NULL);    /*-------end----------*/ }  void enQueue_link(DataType x, PLinkQueue queue) {   //将数据元素x插入队尾。实质：生成一个struct node类型的结点，并给相应成员赋值后插入队尾   //请在此处填写代码，完成相应功能   /*-------begin----------*/   QueueData p;   p=(QueueData)malloc(sizeof(struct node));   if(p==NULL)     cout<<"OUt OF PEACE" ;   else   {     p->info=x;     p->next=NULL;     if( queue->front==NULL)       queue->front=p;     else  queue->rear->next=p;     queue->rear=p;    }     /*-------end----------*/ }  void qqenQueue_link(QueueData *p,PLinkQueue Q) {   //本函数的功能是将 struct node 类型的结点插入队尾，与enQueue_link(DataType x, PLinkQueue queue)的区别是，不需要生成结点    //请在此处填写代码，完成相应功能   /*-------begin----------*/      /*-------end----------*/  }  DataType deQueue_link(PLinkQueue Q) {   //出队，实质： 取出Q队列的队首结点，返回该结点的数据元素，并将该结点使用enQueue_link(QueueData *p,PLinkQueue Q)插入队尾   //本函数为针对本实验特殊设计，可实现秘钥的循环使用   //请在此处填写代码，完成相应功能   /*-------begin----------*/   QueueData p;   if(Q->front==NULL) cout<<"Empty queue."<<endl;   else   {     p=Q->front;     Q->front=p->next;     free(p);   }     /*-------end----------*/ }  void decrypt(char src[], char key[], char dest[]) {   /*  参数： src 放的是源文 ； key 放的是秘钥 ； dest 放加密后的密文        加密函数： 步骤提示        1. 初始化一个空队列Q        2. 将key数组的元素逐个插入队列Q        3. 逐个访问src数组的源文，并加密， 使用deQueue_link(Q)函数可得到队首秘钥，并使秘钥循环使用     */   PLinkQueue p;   p=createEmptyQueue_link();   int i;   char m;   while(i=0, key[i]!='\0', i++)   {     enQueue_link(key[i],p);   }   while(i=0, src[i]!='\0' ,i++)   {     m=deQueue_link(p);     dest[i]=src[i]+m;     enQueue_link(m,p);   }  }  int main(void) {   char src[80] , key[20], dest[80] ;    cin>>src ;    cin>>key;   decrypt(src , key , dest);   cout<<dest; }

user: user-1
content: 建议自己先写一写，遇到问题再提出来吧。既然需求描述的这么详细了，那么代码也不很难实现～