思成毛 2023-11-25 16:37 采纳率: 0%
浏览 3

洛谷C++寄包柜问题

帮我看看这段代码的问题

img


#include<iostream>
#include<malloc.h>
using namespace std;

typedef struct cabinet
{
    int ID;
    long long data;
    struct cabinet* next;
}Cabinet;

Cabinet* cabinet_list[100005];//写一个寄存柜的数组

void add_cabinet_cell(int i,int j, int k)
{
    Cabinet* newcabinet = (Cabinet*)malloc(sizeof(Cabinet));
    newcabinet->ID = j;
    newcabinet->data = k;
    if (cabinet_list[i] == NULL)
    {
        cabinet_list[i] = newcabinet;
    }
    else
    {
        Cabinet* lastcabinet = cabinet_list[i];
        while (lastcabinet->next != NULL)
        {
            if (lastcabinet->ID == j)
            {
                lastcabinet->data = k;
            }
            else
            {
                if ((lastcabinet->next)->next == NULL)
                {
                    (lastcabinet->next)->next = newcabinet;
                    break;
                }
                else 
                {
                    lastcabinet = lastcabinet->next;
                }
            }
        }
    }
}

long long look_up_num(int i,int j)
{
    Cabinet* newcabinet = (Cabinet*)malloc(sizeof(Cabinet));
    newcabinet = cabinet_list[i];
    while (newcabinet->ID != j)
    {
        newcabinet = newcabinet->next;
    }
    return newcabinet->data;
}

int main()
{
    int n = 0, q = 0;
    cin >> n >> q;
    for (int i1 = 0; i1 < n; i1++)
    {
        int n = 0;
        int i = 0, j = 0, k = 0;
        cin >> n;
        switch (n)
        {
        case 1:
            cin >> i >> j >> k;
            add_cabinet_cell(i, j, k);
            break;
        case 2:
            cin >> i >> j;
            cout << look_up_num(i, j) << endl;
        }
    }
    for (int i = 0; i < 100005; i++)
    {
        Cabinet* current = cabinet_list[i];
        while (current != NULL)
        {
            Cabinet* next = current->next;
            free(current);
            current = next;
        }
        cabinet_list[i] = NULL;
    }
}

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-25 19:20
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7545728
    • 你也可以参考下这篇文章:现代C++新特性 非静态数据成员默认初始化
    • 您还可以看一下 吴从周老师的C/C++程序员实战基础课程中的 简单的输入和输出-1小节, 巩固相关知识点
    • 除此之外, 这篇博客: 【数据结构】哈夫曼树的C++面向对象实现中的 类的完整代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      class HuffmanTree
      {
      public:
      	HuffmanTree(int w[ ], int n);
      	HuffmanTree( );
      	void Print( );
      private:
      	ElemType *huffTree;
      	int num;
      	void Select(int n, int &i1, int &i2);
      };
      
      void HuffmanTree::Select(int n, int &i1, int &i2)
      {
      	int temp;
      	int i = 0;
      	for ( ; i < n; i++)
      		if (huffTree[i].parent == -1) {i1 = i; break;}
      	for (i = i + 1; i < n; i++)
      		if (huffTree[i].parent == -1) {i2 = i;break;}
      	if (huffTree[i1].weight > huffTree[i2].weight)  //左边大于右边
      	{
      		temp = i1; i1 = i2;i2 = temp;               //小的是左孩子、大的是右孩子
      	}
      	//从i2的下一位置开始遍历,继续找小的元素,更新i1、i2的值
      		for (i = i + 1; i < n; i++)
      	{
      		if (huffTree[i].parent == -1)
      		{
      			if (huffTree[i].weight < huffTree[i1].weight)
      			{
      				i2 = i1; i1 = i;
      			}
      			else if (huffTree[i].weight < huffTree[i2].weight)
      			{
      				i2 = i;
      			}
      		}
      	}
      }
      
      HuffmanTree::HuffmanTree(int w[ ], int n){
          //构造哈夫曼树
          num=n;
          huffTree=new ElemType[2*n-1];		//建立存储数组 
          int i,k,i1,i2;                      //i为叶子结点循环变量,k标记求和后的节点,i1、i2标记最小次小元素位置
          for(int i=0;i<2*num-1;i++){           //初始化,将parent、lchild、rchild均置为-1
          huffTree[i].parent=-1;
          huffTree[i].lchild=huffTree[i].rchild=-1;
          }
          
          for(int i=0;i<num;i++){
              huffTree[i].weight=w[i];	//传叶子结点 
          }
      
          for(int k=num;k<2*num-1;k++){   //k从数组最后开始,对应权值存储权重数组内最小的俩元素下标
      
              Select( k ,i1,i2 );
              huffTree[k].weight = huffTree[i1].weight+huffTree[i2].weight;
              huffTree[i1].parent= k; huffTree[i2].parent=k;
              huffTree[k].lchild = i1;huffTree[k].rchild = i2;
          }
      }
      
      void HuffmanTree::Print( ){	
      	//输出构造的二叉树中叶子结点到根结点的路径及每个结点的权值(每个结点的数值为孩子权值之和) 
      	int i,k;//i用来遍历最初的叶子结点,K用来遍历有孩子的结点(非叶子结点) 
      	cout << "叶子到根结点的路径:" << endl; 
      	
      	for(i=0;i<num;i++){
      		cout << huffTree[i].weight;
      		k = huffTree[i].parent;
      		while (k != -1)	//循环输出结点 
      		{
      			cout << "-->" << huffTree[k].weight;
      			k = huffTree[k].parent;		//继续往上找叶子结点的父结点的父结点(直到根结点) 
      		}
      		cout << endl;
      	}
      }
      

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

报告相同问题?

问题事件

  • 创建了问题 11月25日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。