主要利用双向链表实现26个英文字母的循环输出
例如输入3,输入结果:
DEFGHIJKLMNOPQRSTUVWXYZABC
输入-3,则输出结果:
XYZABCDEFGHIJKLMNOPQRSTUVW
#include#include #define OK 1 #define ERROR 0 typedef char Elemtype; typedef int Status; typedef struct Node{ Elemtype data; struct Node *prior; struct Node *next; }Node,*linked; Status InitList(linked *L){//初始化链表 Node *p,*q; int i; *L = (linked)malloc(sizeof(Node));//生成一个指向头结点的指针 if(!(*L)){ return ERROR; } (*L)->next = (*L)->prior = NULL; p = (*L);//p节点指向头结点,然后p在指向q,q在往后移动 for(i=0;i<26;i++){//添加26个英文字母 q = (Node *)malloc(sizeof(Node));//生成一个新节点,往里赋值,然后p指向q, //在生成新节点,以此循环 if(!q){ return ERROR; } q->data = 'A'+i; q->prior = p; q->next = p->next;//把q的next置为null p->next = q; p=q; } //实现巡回的主要步骤 p->next = (*L)->next; //此时p,q都在最指的是最后一个节点,使p/q指向头结点的下一个节点 (*L)->next->prior=p;//然后头结点的下一个节点在指回p/q。 (*L) = p;//头结点在指向p/q return OK; } void Casear(linked *L,int i){//打印输出链表 if(i>0){ do{ (*L) = (*L)->next; }while(--i); } if(i<0){ do{ (*L) = (*L)->prior; }while(++i); } } int main() { linked L; int i,n; InitList(&L); printf("输入一个整数:n"); scanf("%d",&n); Casear(&L,n); for(i=0;i<26;i++){ L = L->next; printf("%c",L->data); } return 0; }



