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