数据结构基础(C++版)(张力译版)校正 之二 .

2023-11-22 09:08

本文主要是介绍数据结构基础(C++版)(张力译版)校正 之二 .,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

page 155--156

1. 很显然 155 页的倒数第二行的 if(!out[i])  应改为:if(!out[j]);

2. 156 页的关于delete delnode; 因为在前面的出栈入栈操作时打乱了原来的链表所以通过此处循环释放内存不可取,

     我想,咱们可以在出栈操作后释放内存。例如:

       if(!top)break;
     x=first[top->data];
     ENode *t=top;
     top=top->link;
     delete t;

另外,不需入栈的节点也要释放:

if (!out[j])
     {
      cout<<","<<j;
      out[j]=true;
      ENode *y=x->link;
      x->link=top;
      top=x;
      x=y;
     }
    
 else
     {
      ENode *t=x;
      x=x->link;
      delete t;
     }

一下是我的代码供参考:

#include "ENode.h"
#include <iostream>
using namespace std;
void Equivalence()
{
 cout<<"input the numbers of the pairs :"<<endl;
    int n=0;
 do
 {
  cin>>n;
  if (n>0)break;
  else
   cout<<"input the numbers of the pairs(must bigger than 0):"<<endl;
  
 } while (1);
 
 ENode **first=new ENode* [n];
 bool *out=new bool[n];
 fill(out,out+n,false);
 // fill(first,first+n,0);
 memset(first,0,n*sizeof(ENode*));
 cout<<"input the pairs :"<<endl;
 int i;
 int t1,t2;
 
 while(cin>>t1>>t2)
 {
  first[t1]=new ENode(t2,first[t1]);
  first[t2]=new ENode(t1,first[t2]);
 }
 
 //找等价类
 for (i=0;i<n;i++)
 {
  if (!out[i])
  {
   cout<<endl<<"A new class :";
   cout<<i;
   out[i]=true;
   ENode *x=first[i];
   ENode *top=0;
   while (1)
   {
    while (x)
    {
     int j=x->data;
     if (!out[j])
     {
      cout<<","<<j;
      out[j]=true;
      ENode *y=x->link;
      x->link=top;
      top=x;
      x=y;
     }
     else
     {
      ENode *t=x;
      x=x->link;
      delete t;
     }
    }
    if(!top)break;
    x=first[top->data];
    ENode *t=top;
    top=top->link;
    delete t;
   }
  }
 }
 //   for (i=0;i<n;i++)
 //    while (first[i])
 //    {
 //     ENode *delnode=first[i];
 //     first[i]=delnode->link;
 //     delete delnode;
 //    }
 delete[] first;
 delete [] out;
}

 

 

///示例:

input the numbers of the pairs :
5
input the pairs :
0 1
2 3
1 4
4 0
^Z


A new class :0,4,1
A new class :2,3
Press any key to continue

这篇关于数据结构基础(C++版)(张力译版)校正 之二 .的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/409047

相关文章

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.