对《数据结构与算法》22讲caser函数的部分改写(用while实现)
#include <stdio.h>#include <stdlib.h>
#defineOK1
#defineERROR0
typedefintstatus;
typedefcharElemType;
typedef struct DualNode
{
ElemType data;
struct DualNode*prior;
struct DualNode*next;
}DualNode,*Dulinklist;
status Initlist(Dulinklist*L)
{
DualNode *p,*q;
int i;
*L=(Dulinklist)malloc(sizeof(DualNode));
if(!(*L))
return ERROR;
(*L)->prior=(*L)->next=NULL;
p=(*L);
for(i=0;i<26;i++)
{
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->next=(*L)->next;
(*L)->next->prior=p;
return OK;
}
void caser(Dulinklist*L,int i)
{
if(i>0)
{
i=i+2;
while(--i)
{
(*L)=(*L)->next;
}
}
if(i<0)
{
i=i-1;
(*L)=(*L)->next;
while(++i)
{
(*L)=(*L)->prior;
}
}
}
int main()
{
Dulinklist L;
int i,n;
Initlist(&L);
printf("请输入一个整数:\n");
scanf("%d",&n);
caser(&L,n);
for(i=0;i<26;i++)
{
printf("%c ",L->data);
L=L->next;
}
printf("\n");
return 0;
}
页:
[1]