鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 疯狗马德森

[已解决]请问哪里有错误?P22讲 线性表17

[复制链接]
发表于 2023-12-23 09:24:08 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define OK 1
  4. #define ERROR 0
  5. typedef char ElemType;
  6. typedef int Status;

  7. typedef struct DualNode
  8. {
  9.     ElemType data;
  10.     struct DualNode *prior;
  11.     struct DualNode *next;
  12. }DualNode, *DuLinkList;

  13. Status InitList(DuLinkList *L)
  14. {
  15.     DualNode *p,*q;
  16.     int i;
  17.     *L=(DuLinkList)malloc(sizeof(DualNode));
  18.     if(!(*L))
  19.     {
  20.         return ERROR;
  21.     }
  22.     (*L)->next=(*L)->prior=NULL;
  23.     p=(*L);
  24.     for(i=0;i<26;i++)
  25.     {
  26.         q=(DuLinkList)malloc(sizeof(DualNode));
  27.         if(!q)
  28.         {
  29.             return ERROR;
  30.         }
  31.         q->data='A'+i;
  32.         q->prior=p;
  33.         q->next=p->next;
  34.         p->next=q;
  35.         
  36.         p=q;
  37.     }
  38.     p->next = (*L)->next;
  39.     (*L)->prior = p;
  40.    
  41.     return OK;
  42. }

  43. void Caesar(DuLinkList *L,int i)
  44. {
  45.     if(i>0)
  46.     {
  47.         do {
  48.             (*L)=(*L)->next;
  49.         } while (--i);
  50.     }
  51.     else if(i<0)
  52.     {
  53.         i=-i+1;
  54.         do {
  55.             (*L)=(*L)->prior;
  56.         } while (--i);
  57.     }
  58. }

  59. void PrintCeasar(DuLinkList L)
  60. {
  61.     int i;
  62.     DuLinkList temp = L; // 保存链表头部指针
  63.     for (i = 0; i < 26; i++)
  64.     {
  65.         temp = temp->next;
  66.         printf("%c", temp->data);
  67.     }
  68.     printf("\n");
  69. }

  70. int main(void)
  71. {
  72.     DuLinkList L;
  73.     int n;

  74.    
  75.     InitList(&L);
  76.     printf("请输入一个整数:");
  77.     scanf("%d",&n);
  78.     printf("\n");
  79.     Caesar(&L, n);
  80.     PrintCeasar(L);
  81.    
  82.     return 0;
  83. }
复制代码


  1. 请输入一个整数:-1

  2. ZABCDEFGHIJKLMNOPQRSTUVWXY
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-25 07:16:48 | 显示全部楼层
  1.     else if (i < 0)
  2.     {
  3.         i=i-1;
  4.         (*L)=(*L)->next;
  5.         do {
  6.             (*L) = (*L)->prior;
  7.         } while (++i);
  8.     }
复制代码

请问一下,为什么要执行-i+1?直接用- i不可以吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表