鱼C论坛

 找回密码
 立即注册
查看: 1978|回复: 3

[已解决]双向循环列表总是多输出一个T,求各位大佬帮忙看一下是哪里出错了

[复制链接]
发表于 2020-3-4 17:44:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
双向循环列表总是多输出一个T,求各位大佬帮忙看一下是哪里出错了,谢谢各位大佬!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define OK 1
  4. #define ERROR 0

  5. typedef struct{
  6. char value;
  7. }ElementType;


  8. typedef struct Node
  9. {
  10.    Node *prev,*next;
  11.    ElementType data;
  12. }LNode,*LinkList;


  13. typedef short Status;   //状态值,1表示正确,<=0表示各种错误


  14. Status CreateLinkList(LinkList &L)  //创建循环双向链表,正确返回1,否则返回错误值,调用后需要根据返回值进行相应操作
  15. {
  16.         LinkList p = NULL,q = NULL;
  17.         int j = 1;
  18.         L = (LinkList)malloc(sizeof(LNode));
  19.         if(L == NULL)
  20.         {
  21.                 printf("内存申请失败");
  22.                 return  ERROR;
  23.         }
  24.         L->prev = L;
  25.         L->next = L;
  26.         return OK;               
  27. }


  28. Status IsEmpty(LinkList &L)  //判断传入的是否是空链表(我们对于空链表的定义是只存在头结点的链表)
  29. {
  30.         if(L->prev==L&&L->next==L)
  31.         {
  32.                 return OK;
  33.         }
  34.         else
  35.                 return ERROR;

  36. }


  37. Status InsertDataAtTail(LinkList &L,ElementType e)  //每次从链表最后位置插入元素e
  38. {
  39.         LinkList p=NULL,q=NULL;
  40.                 p=L;
  41.                 while(1)
  42.                 {
  43.                         if(p->next==L)
  44.                                 break;
  45.                         p=p->next;
  46.                 }
  47.                 q=(LinkList)malloc(sizeof(LNode));
  48.                 if(q==NULL)
  49.                 {
  50.                         printf("插入元素失败!");
  51.                         return ERROR;
  52.                 }       
  53.                 q->data=e;
  54.                 q->prev=p;
  55.                 q->next=p->next;
  56.                 p->next=q;
  57.                 p=q;
  58.                 p->next=L;
  59.                 L->prev=p;
  60.                 return  OK;
  61. }


  62. Status DeleteDataFromList(LinkList &L,char e)  //从链表中删除指定的元素
  63. {
  64.         LinkList p=NULL;
  65.         int i=1;
  66.         p=L;
  67.         while(1)
  68.         {
  69.                  p = p->next;
  70.                  if(p->data.value==e)
  71.                  {
  72.                          break;
  73.                 }
  74.                 if(p->next==L)
  75.                 {
  76.                         printf("元素不存在");
  77.                         return ERROR;
  78.                         break;
  79.                 }
  80.         }
  81.         p->next->prev=p->prev;
  82.         p->prev->next=p->next;
  83.         return OK;
  84. }

  85. Status SeparateList(LinkList &L)//将数字与英文字符分割为两个双向循环列表
  86. {
  87.         LinkList p=NULL,num=NULL,cha=NULL;
  88.         LinkList L_num=NULL,L_char=NULL;
  89.         CreateLinkList(L_num);
  90.         CreateLinkList(L_char);
  91.         p=L->next;
  92.         while(p!=L)
  93.         {
  94.                
  95.                 if(p->data.value>=48&&p->data.value<=57)
  96.                 {
  97.                         InsertDataAtTail(L_num,p->data);
  98.                 }
  99.                 else
  100.                 {       
  101.                         InsertDataAtTail(L_char,p->data);
  102.                 }
  103.                 p=p->next;
  104.         }
  105.         if(IsEmpty(L_num)==1)
  106.         {
  107.                 printf("没有数字\n");
  108.         }
  109.         else
  110.         {
  111.                 printf("数字双向链表的内容是:\n");
  112.                 num=L_num->next;
  113.                 while(1)
  114.                 {
  115.                        
  116.                         printf("%c",num->data.value);
  117.                        
  118.                         num=num->next;
  119.                         if(num==L_num)
  120.                                 break;
  121.                 }
  122.                 printf("\n");
  123.         }
  124.         if(IsEmpty(L_char)==1)
  125.         {
  126.                 printf("没有字符\n");
  127.         }
  128.         else
  129.         {
  130.                 printf("字符双向链表的内容是:\n");
  131.                 cha=L_char->next;
  132.                 while(1)
  133.                 {
  134.                        
  135.                         printf("%c",cha->data.value);
  136.                         cha=cha->next;
  137.                         if(cha==L_char)
  138.                                 break;
  139.                 }
  140.                 printf("\n");
  141.         }
  142.         return OK;
  143. }

  144. int main()
  145. {
  146.         LinkList L=NULL;
  147.         int number,i;
  148.         ElementType e;
  149.         if(CreateLinkList(L)==1)//创建双向循环列表
  150.                 printf("双向循环链表创建成功!\n");
  151.         printf("输入列表长度,以回车符结束。\n");
  152.         scanf("%d",&number);
  153.         getchar();//删去输入的回车
  154.         printf("请输入单个数字或英文字符:\n");
  155.         for(i=1;i<=number;++i)
  156.         {
  157.                 printf("请输入第%d个数据(总数%d):\n",i,number);
  158.                 scanf("%c",&e.value);
  159.                 getchar();
  160.                 InsertDataAtTail(L,e); //尾插法插入输入的元素
  161.         }
  162.         for(i=1;i<=number;++i)
  163.         {
  164.                 L=L->next;
  165.                 printf("%c",L->data.value);
  166.                
  167.         }printf("\n");
  168.         SeparateList(L);
  169.         return 0;
  170. }
复制代码

批注 2020-03-04 174335.jpg
最佳答案
2020-3-4 17:51:49
我这里没有T啊
你在编译选项里加上-std=c99试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-4 17:51:49 | 显示全部楼层    本楼为最佳答案   
我这里没有T啊
你在编译选项里加上-std=c99试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 19:05:04 | 显示全部楼层
qiuyouzhi 发表于 2020-3-4 17:51
我这里没有T啊
你在编译选项里加上-std=c99试试

谢谢大佬,我终于发现我错在哪了是我的主函数的L位置的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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