• 双向循环链表


    /*处理关于26个英文字母的双向循环关系:例如输入n=0,则编译结果为:ABCDEFGHIJKLMNOPQRSTUVWXYZ;如果输入n=1,则输出结果为:BCDEFGHIJKLMNOPQRSTUVWXYZ;*/

    #include <stdio.h>

    #include <stdlib.h>

    #define ERROR 0

    #define OK 1

    typedef char ElemType;// 元素的类型
    typedef int Status;
    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)->next=(*L)->prior=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原本是NULL,该语句把NULL给了q->next
          p->next=q;
          p=q;//使p往后移
        }
       p->next=(*L)->next;
       (*L)->next->prior=p;
       return OK;
    }
    void Caesar(DulinkList *L,int i)
    {
      if(i>0)
        {
          do
            {
              (*L)=(*L)->next;
            } while(--i);
        }
    /*  if(i<0)
        {
          do
            {
              (*L)=(*L)->prior;
            }while(++i);
        }*/
      if(i < 0)

        {
            DualNode* p = (*L)->next;
            for(i; i<0; i++)

              {
                //printf("p is %c ", p->data);
                         (p) = (p)->prior;
                         }
           (*L) = p->prior;
        }
    }
    int main()
    {
      DulinkList L;
      int i,n;
      InitList(&L);
      printf("请输入整数:");
      scanf("%d",&n);
      printf(" ");
      Caesar(&L,n);//凯撒密码
      for(i=0;i<26;i++)
        {
          L=L->next;
          printf("%c",L->data);
        }
      return 0;
    }

    对于其中的指针问题,要特别注意调用函数时,传递函数参数时,形参与实参的问题,小技巧是:形参如果是指针类型的,那么,该子函数中的相应变量都加上"*"即可!

    还要注意格式问题,这样便于调试。

  • 相关阅读:
    DLL库
    C#:时间转换
    视频通信网址
    C#:向exe传值
    C#:复杂条件判断类型(练习)
    注册、卸载DLL
    Windows:常见问题
    WPF:常见问题
    CentOS完美搭建Redis3.0集群并附测试
    xargs命令
  • 原文地址:https://www.cnblogs.com/caiyineng/p/4895897.html
Copyright © 2020-2023  润新知