鹤顶红裤衩子 2022-04-08 17:17 采纳率: 100%
浏览 35
已结题

双向链表的排序问题,结果为什么总有一个奇奇怪怪的数

写了一个随机双向链表,排序操作有问题,导致我在进行排序的时候,总是会出现一个不知道哪来的数,请大家帮我看看是函数写的有问题还是在创建链表的时候我多创了空间导致他自己写了个数在里面。

这个是我写的结构体:
typedef struct ltbl
{
struct ltbl* pPre; //前一个
struct ltbl* pNxt; //后一个
int nKey; //结点里的值
unsigned char ucDummy[32]; //备用
}LTBL;

typedef struct mng
{
int nNodeCnt; //链表长度
LTBL* pHead; //指向头指针
}MNG;

这里是我的创建和排序:
int TBLCreate (MNG* pMng, int nCnt)
{
int i;
LTBL* head = NULL;
LTBL* p = NULL;
LTBL* q = NULL;
head = (LTBL*)malloc(sizeof(LTBL));
pMng->pHead = head;
srand((unsigned int)time(0));
pMng->nNodeCnt = nCnt;

if(NULL == head)
{
    printf("WRONG!");
    return NG;
}
head->pPre = NULL;
head->nKey = rand() % 200;
head->pNxt = NULL;
p = head;
for(i=1; i<=pMng->nNodeCnt; ++i)
{
    q = (LTBL*)malloc(sizeof(LTBL));
    if(NULL == q)
    {
        printf("WRONG!");
        return NG;
    }
    q->nKey = rand() % 200;
    p->pNxt = q;
    q->pPre = p;
    q->pNxt = NULL;
    p = q;
}
q->pNxt = NULL;
return OK;

}

void TBLSort(MNG* pMng, int nFlg)
{
int t = 0;
LTBL* head;
LTBL* p = NULL;
LTBL* q = NULL;
head = pMng->pHead;
if(0 == nFlg)
{
for(p=head; p!=NULL; p=p->pNxt)
{
for(q=p->pNxt; q!=NULL; q=q->pNxt)
{
if(p->nKey > q->nKey)
{
t = q->nKey;
q->nKey = p->nKey;
p->nKey = t;
}
}
}
}
if(1 == nFlg)
{
for(p=head; p!=NULL; p=p->pNxt)
{
for(q=p->pNxt; q!=NULL; q=q->pNxt)
{
if(p->nKey < q->nKey)
{
t = q->nKey;
q->nKey = p->nKey;
p->nKey = t;
}
}
}
}
Print(pMng);
}

运行结果及报错内容

img

我的解答思路和尝试过的方法 :我换的是结点里面的值 如果有人能告诉我怎么换结点就更好了 我试了很多办法都运行不了
  • 写回答

2条回答 默认 最新

  • 关注

    是你创建链表的时候多创建了一个节点
    你先创建了 head 首元节点之后 for (i = 1; i <= pMng->nNodeCnt; ++i) 循环NodeCnt次 (比如NodeCnt=10)
    一共创建了 NodeCnt 加 1 (10+1=11)个节点
    但是你 Print(pMng)函数只输出 10个节点,最后一个没有输出
    而排序时是遍历全部11个节点,最后一个没有输出的节点也参与排序
    再次 Print(pMng)输出还是只输出前 10个节点,之前没有输出的值排到了前面所以输出了, 排到最后的最大值又没有输出

    你把for (i = 1; i <= pMng->nNodeCnt; ++i) 中i=1 改成 i=2 即可

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致