马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
那道凯撒加密题。老师上课的程序在输入负数值时会出错!
现在贴上正确代码:#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
typedef struct DualNode
{
ElemType data;
struct DualNode* prior;
struct DualNode* next;
}DualNode;
Status initList(DualNode** L){
DualNode* p, *q;
int i;
*L = (DualNode*)malloc(sizeof(DualNode));
if(!(*L)){
return ERROR;
}
(*L)->next = (*L)->prior = NULL;
p = *L;
for(i=0; i<26; i++){
// q指向新建立的节点
q = (DualNode*)malloc(sizeof(DualNode));
if( !q ){
return ERROR;
}
q->data = 'A' + i;
q->prior = p;
q->next = p->next;
p->next = q;
// p指向q前一个节点
p = q;
}
p->next = (*L)->next;
(*L)->next->prior = p;
return OK;
}
void casar(DualNode** L, int i){
if(i > 0){
do{
(*L) = (*L)->next;
}while(--i);
}
if(i < 0){
DualNode* p = (*L)->next;
for(i; i<0; i++){
//printf("p is %c\n", p->data);
(p) = (p)->prior;
}
(*L) = p->prior;
}
}
int main(){
DualNode* L;
int i, n;
initList(&L);
printf("Input an integer:\n");
scanf("%d", &n);
casar(&L, n);
if(L == NULL){
printf("L is NULL\n");
}
else{
//printf("%c\n", L->data);
}
for(i=0; i<26; i++){
L = L->next;
printf("%c", L->data);
}
printf("\n");
}
|