求机票管理系统的代码解释

       printf("班次号:%d\n", flights[i].flightNumber);
       printf("起飞时间:%s\n", flights[i].departureTime);
       printf("线路:%s\n", flights[i].route);
       printf("飞行时间:%d\n", flights[i].flightDuration);
       printf("载客量:%d\n", flights[i].seatingCapacity);
       printf("\n");
   }

}
printf("未找到匹配的班次信息。\n");
}

打印班次号,起飞时间,线路,飞行时间,载客量,未找到匹配的班次信息等

这代码中英文对照的,前面提示是中文,后面变量是英文,就算你不会编程,也应该能看懂。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7452027
  • 这篇博客你也可以参考下:环形链表与约瑟夫问题的代码解决
  • 除此之外, 这篇博客: 堆的简单理解和代码实现中的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
     void AdjustUp(int* a, int child)
    {
    	int parent = (child - 1) / 2;
    	//while (parent >= 0)  不对的 parent不会小于0
    	while (child > 0)
    	{
    		if (a[child] < a[parent])
    		{
    			Swap(&a[child], &a[parent]);
    			child = parent;
    			parent = (child - 1) / 2;
    		}
    		else
    		{
    			break;
    		}
    	}
    }

     从叶子节点插入一个元素后,想要继续保持堆的结构不变。从下往上,对二叉树进行调整,确保最后是小堆。

    图示过程如下:

    1.未进行插入新元素的堆:

    image-20210904153618481

    2.新元素0

    image-20210904153648924

    3.新元素0跟此时的父亲节点5比较,比5小,交换

    image-20210904153815449

    4.然后0继续和新的父亲节点2比较,比2小,交换

    image-20210904153910297

    5.然后0继续和新的父亲节点0进行比较,比1小,交换

    image-20210904153956590

    运用错位相减计算

     

    这里以建立小堆为例,我们需要保证小堆的结构,这里通过自下而上进行调整。

    这里提一嘴为什么建堆过程中的for循环内i初始值设置为(n-1-1)/2,首先数组最后一个元素下标是n-1,又有child=2*parent+1,带入后就是这个初始值。

    void HeapInit(HP* php, HPDataTpye* a, int n)
    {
    	assert(php);
    
    	php->a = (HPDataTpye*)malloc(sizeof(HPDataTpye)*n);
    	if (php->a == NULL)
    	{
    		printf("malloc fail\n");
    		exit(-1);
    	}
    
    	memcpy(php->a, a, sizeof(HPDataTpye)*n);
    
    	// 建堆
    	for (int i = (n-2)/2; i >= 0; --i)
    	{
    		AdjustDown(php->a, n, i);
    	}
    
    	php->size = n;
    	php->capacity = n;
    }

     

    直接free掉a,然后把php->a置空,并把size和capacity置0

    void HeapDestroy(HP* php)
    {
    	assert(php);
    
    	free(php->a);
    	php->a = NULL;
    	php->size = php->capacity = 0;
    }

    1.先判断下空间是否满了,若满了,realloc开辟一块新的空间,没满就不需要开辟。

    2.然后把新插入的元素放在最后一个叶子节点处

    3.接下来与其双亲结点进行比较,如果比双亲结点小,就交换其值,一直不断重叠

    4.最后如果该数据比双亲结点值大,就结束调整;如果当child等于0,就结束调整

     

    // 插入x,保持他继续是堆
    void HeapPush(HP* php, HPDataTpye x)
    {
    	assert(php);
    	if (php->size == php->capacity)
    	{
    		HPDataTpye* tmp = (HPDataTpye*)realloc(php->a, php->capacity * 2 * sizeof(HPDataTpye));
    		if (php->a == NULL)
    		{
    			printf("realloc fail\n");
    			exit(-1);
    		}
    		php->capacity *= 2;
    	}
    
    	php->a[php->size] = x;
    	php->size++;
    
    	AdjustUp(php->a, php->size - 1);
    }
  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 左旋和右旋的代码实现小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^