求问!!!数据结构课程设计题:病毒测试程序。(c语言)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求问!!!数据结构课程设计题:病毒测试程序。(c语言)相关的知识,希望对你有一定的参考价值。

数据结构课程设计题:病毒测试程序。(c语言)
病毒测试程序
本题的任务是:
当整个网络被感染后,计算有多少台机器被某个特定变种所感染。
输入要求:
输入由若干组测试数据组成。
每组数据的第1行包含2个整数M和N(1≤M,N≤500),接下来是一个M*N的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。
下面一行给出一个正整数Q,是将要查询的变种的个数。接下去的Q行里,每行给出一个变种的类型。
当M或N为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:
对每一组测试,在一行里输出被某个特定变种所感染的机器数量。

哪个大侠做过,给我一份吧。。。。我不太懂问题的意思,想参考一下。或发邮箱:464514822@qq.com

参考技术A #include <stdio.h>
#include <stdlib.h>
int iGlobal;
typedef struct tagNode

int iData;
int iCount;
struct tagNode *pLeft;
struct tagNode *pRight;
Node;
Node *Add(Node *a, Node *pNow, int iVal)

if (iGlobal == 0)

a[0].pLeft = a[0].pRight = NULL;
a[0].iCount = 1;
a[0].iData = iVal;
++iGlobal;

else

if (pNow == NULL)

pNow = a + (iGlobal++);
pNow->pLeft = pNow->pRight = NULL;
pNow->iCount = 1;
pNow->iData = iVal;

else

if (iVal < pNow->iData)

pNow->pLeft = Add(a, pNow->pLeft, iVal);

else if (iVal == pNow->iData)

++pNow->iCount;

else

pNow->pRight = Add(a, pNow->pRight, iVal);



return pNow;

Node *Find(Node *a, int iVal)

if (a == NULL)

return NULL;

else

if (iVal < a->iData)

return Find(a->pLeft, iVal);

else if (iVal == a->iData)

return a;

else

return Find(a->pRight, iVal);



int main(void)

int m, n, i, q, temp;
Node *a = NULL;
Node *p = NULL;
FILE *fp;
if ((fp = fopen("data.txt", "r")) == NULL)

printf("File not found!\n");
return -1;

fscanf(fp, "%d %d", &m, &n);
do

iGlobal = 0;
if ((a = (Node *)malloc(m * n * sizeof(Node))) == NULL)

return -1;

for (i=0; i<m*n; ++i)

fscanf(fp, "%d", &temp);
Add(a, a, temp);

fscanf(fp, "%d", &q);
for (i=0; i<q; ++i)

fscanf(fp, "%d", &temp);
p = Find(a, temp);
if (p == NULL)

putchar('0');

else

printf("%d", p->iCount);

if (i != q-1)

putchar(' ');

else

putchar('\n');


if (a != NULL)

free(a);
a = NULL;

fscanf(fp, "%d %d", &m, &n);
while (m != 0 && n != 0);
return 0;

根据我的理解文件中的数据应该是这样的:
3 4
1 1 1 4
2 2 2 4
3 3 3 4
4
1
2
3
4
0 0
每一个整数或负数表示每种病毒变种,这个解答的思路是建立二叉排序树,存放数据的文件名为data.txt,你可以自己在源代码中修改。如果理解错了,那就给出测试用例,我再修改来自:求助得到的回答本回答被提问者采纳
参考技术A 什么代表病毒?什么代表变种?没有例子.追问

题目就是这样写的,我也不明白。。。。现在还没读懂题目呢TAT给我个提示或者大致思路也行。。。

20182324 2019-2020-1 《数据结构与面向对象程序设计》哈夫曼编码测试报告

20182324 2019-2020-1 《数据结构与面向对象程序设计》哈夫曼编码测试报告

课程:《程序设计与数据结构》
班级: 1823
姓名: 殷宇豪
学号: 20182324
课程教师:王志强
测试日期:2019年11月22日
必修/选修: 必修

1.测试内容

设有字符集:S = { a , b , c , d , e , f , g , h , i , j , k , l , m , n , o , p , q , r , s , ,t , u , v , w , x , y , z}。

给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。

并完成对英文文件的编码和解码。

要求:

  • (1)准备一个包含 26 个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率

  • (2)构造哈夫曼树

  • (3)对英文文件进行编码,输出一个编码后的文件

  • (4)对编码文件进行解码,输出一个解码后的文件

  • (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云

  • (6)把实验结果截图上传到云班课

2. 实验过程及结果

  • (1)事先准备好一个包含 26 个英文字母的文本文件,相对路径为srcHuffmanTree.txt,使用读写流将其内容读出并存储英文字母出现的个数。

      File file = new File("src\\HuffmanTree.txt");
      if (!file.exists())
      {
          file.createNewFile();
      }
      BufferedReader br = new BufferedReader(new FileReader(file));
      String s;
      String message = "";
    
      while((s = br.readLine()) != null)
      {
          message += s; 
      }
    
      String[] result = message.split("");
      for (int n = 0;n < result.length; n++){
          for (int i = 0; i < 27; i++){
              if (result[n].equals(list.get(i))){
                  number[i] += 1;
              }
          }
      }
  • (2)构造 HuffmanTree

      while (nodes.size() > 1)
      {
          Collections.unmodifiableList(nodes);
    
          HuffmanNode left = nodes.get(nodes.size() - 2);
          left.setCode("0");  //左子树置为 0
          HuffmanNode right = nodes.get(nodes.size() - 1);
          right.setCode("1");  //右子树置为 1
          HuffmanNode parent = new HuffmanNode(null, left.getLength() + right.getLength());
          parent.setLeft(left);
          parent.setRight(right);
          nodes.remove(left);
          nodes.remove(right);
          nodes.add(parent);
      }
  • (3)将 26 个英文字母出现的次数与文本总字数相除,使用DecimalFormat规范小数位,输出各字母出现的概率。

      List<HuffmanNode> nodeList = new ArrayList<HuffmanNode>();
      DecimalFormat df = new DecimalFormat( "0.0000000");
      double wei;
      double sum = result.length;
    
      for(int i = 0;i < 27;i++)
      {
          wei = ((double) number[i]/sum);
          System.out.println(list.get(i) + "出现" + number[i] + "次,概率为" + df.format(wei));
          nodeList.add(new HuffmanNode(list.get(i),number[i]));
      }
  • (4)将 Huffman 树中的内容进行编码。

      List<HuffmanNode> list = new ArrayList<HuffmanNode>();
      Queue<HuffmanNode> queue = new ArrayDeque<HuffmanNode>();
    
      if (root != null)
      {
          queue.offer(root);
          root.getLeft().setCode(root.getCode() + "0");
          root.getRight().setCode(root.getCode() + "1");
      }
    
      while (!queue.isEmpty())
      {
          list.add(queue.peek());
          HuffmanNode node = queue.poll();
          if (node.getLeft() != null)
          {
              node.getLeft().setCode(node.getCode() + "0");
          }
          if (node.getRight() != null)
          {
              node.getRight().setCode(node.getCode() + "1");
          }
    
          if (node.getLeft() != null)
          {
              queue.offer(node.getLeft());
          }
    
          if (node.getRight() != null)
          {
              queue.offer(node.getRight());
          }
      }
  • (5)对源文件进行编解码操作,并分别输出结果。

      HuffmanTree huffmanTree = new HuffmanTree();
      HuffmanNode node = createTree(nodeList);
      List<HuffmanNode> inlist = new ArrayList<HuffmanNode>();
      inlist = huffmanTree.breadth(node);
    
      String[] name = new String[number.length];
      String[] code = new String[number.length];
    
      File file1 = new File("src\\Huffman编码文件.txt");
      File file2 = new File("src\\Huffman解码文件.txt");
      FileWriter fileWriter1 = new FileWriter(file1);
      FileWriter fileWriter2 = new FileWriter(file2);
  • 最终运行结果如图所示:
    技术图片

以上是关于求问!!!数据结构课程设计题:病毒测试程序。(c语言)的主要内容,如果未能解决你的问题,请参考以下文章

C语言课程设计

防病毒Clamav使用及API调用测试

求问一道c语言编程题,在二维数组中进行查找 输出下标

C语言实训

关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。

关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。