qq2672909406 2020-03-12 09:51 采纳率: 100%
浏览 153
已采纳

比较学号大小建立双向链表

typedef struct xueshengzheng
{

char xuehao[20];

 struct xueshengzheng *Next;

struct xueshengzheng *Last;

}*hData,Data;

struct xueshengzheng *head;

head=(hData)malloc(sizeof(struct xueshengzheng));

    head->Next=NULL;

while(1)

 {
 hData p2=NULL,p1;
 p1=&head;
 p2=(hData)malloc(sizeof(struct xueshengzheng)); //录入信息的结点
 scanf("%s",p2->xuehao);
if(strcmp(p2->xuehao,"00000000")==0)
break;
 p2->Next=NULL;
  if(head->Next==NULL)  //头节点的连接
  {
     head->Next=p2;  
     p2->Last=head;
  }
  else
  {
    while((p1->Next!=NULL)&&(strcmp(p2->xuehao,p1->Next->xuehao)>0)) //判定结点连接位置
    {
         p1=p1->Next;
    }
    if((strcmp(p2->xuehao,p1->xuehao)<0)&&(p1->Next!=NULL))//如果链表出现比新结点小的学号则将新结点连接
    {
    p2->Next=p1->Next;
    p1->Next->Last=p2;
    p1->Next=p2;
    p2->Last=p1;
    printf("u");
    }
    if(p1->Next==NULL)  //如果链表到达末尾,则直接连接结点
    {
     p1->Next=p2;
     p2->Last=p1;

    }
   }
}

各位大佬,可以看看我这个根据学号建立的双向链表有什么问题吗。。。改了一天了,还是没改出来,真的大脑有点乱,请各位大佬高抬贵手了~~~谢谢大佬们。

  • 写回答

1条回答 默认 最新

  • 白色一大坨 2020-03-12 10:21
    关注

    刚才有点问题,没考虑最后一个添加,已经修改,请看看:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct xueshengzheng
    {
        char xuehao[32];
        struct xueshengzheng  *Last;
        struct xueshengzheng  *Next;
    }*hData;
    
    hData head;
    
    void main()
    {
        head = (hData)malloc(sizeof(struct xueshengzheng));
    
        head->Next = NULL;
        while (1)
        {
            hData p2 = NULL, p1;
            p1 = head;
            p2 = (hData)malloc(sizeof(struct xueshengzheng));
            scanf("%s", p2->xuehao);
            if (strcmp(p2->xuehao, "00000000") == 0)
                break;
    
            p2->Next = NULL;
            if (head->Next == NULL)
            {
                head->Next = p2;
                p2->Last = head;
                printf("插入第一个节点\n");
            }
            else
            {
                while ((p1->Next != NULL) && (strcmp(p2->xuehao, p1->Next->xuehao) > 0))
                {
                    p1 = p1->Next;
                }
                if (p1->Next != NULL)
                {
                    if ((strcmp(p2->xuehao, p1->Next->xuehao) < 0))
                    {
                        p2->Next = p1->Next;
                        p1->Next->Last = p2;
                        p1->Next = p2;
                        p2->Last = p1;
                        printf("插入节点\n");
                    }
                }
                else
                {
                    p1->Next = p2;
                    p2->Last = p1;
    
                }
            }
        }
        system("pause");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 flask项目,怎么使用AJAX传数据库数据到echarts图表的data里,实现异步加载数据。
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?