2024王道408数据结构 P39 T20

2024王道408数据结构 P39 T20

思考过程

  1. 首先还是先看题目,这题有一点繁琐,有题意可知我们先要找到data值为x的结点,然后让该结点的f值+1,最后再把它从链表里删除,插入到合适的位置让链表降序排列。
  2. 明确了题目的意思之后我们先设指针p和q,struct node *q, *p = L->next;p用来遍历链表找到值为x的结点,我们直接while (p && p->data != x) p = p->next,这样让p就直接到找值为x的结点,我们假设链表长这个样子,x为3,如下图所示请添加图片描述
  3. 这时候我们就把值为3的结点的f+1,+1之后我们就可以删除这个结点了,if (p->next != NULL) p->next->prior = p->prior//如果该结点正好是链表中的最后一个结点时就不用执行这一步 ; p->prior-next = p->next;这一步就是把该结点删除,之后让q指针指向p的前驱结点,如下图所示请添加图片描述
  4. if判断q指针的f值是否>p指针的f值,如果大于的话就表示p指针指向的结点应该插入在这个位置,如果小于或等于的话就让q指针往前移动while (q != L && q->f <= p->f) q = q->prior;这一步是为了让q找到适合p插入的位置。
  5. 找到适合插入的位置之后就是插入结点了。请添加图片描述

最后完整代码附上

//
// Created by 黎圣  on 2023/7/26.
//
#include "iostream"
typedef struct node
{
   
    int data, f;
    struct node *next, *prior;
}*linklist;

//我举的例子
int a[5] = {
   1,2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值