【数据结构】广义表的默认成员函数、深度、大小、打印

广义表的定义:

广义表是非线性的结构,是n个元素的有限序列。

举例:A=(a,b,(c,d))

我们先定义它的结构:

(1)它有三种节点,头节点、值节点、子表节点。

(2)两种指向下一节点的指针:指向下一值值节点的指针_next,指向子表节点的指针_sublink.

(3)_next与_sublink只有一种

enum Type//用枚举形式来定义广义表中三种节点类型
{
    HEAD, //头类型
    VALUE,//值类型
    SUB,//子表类型
};

struct GeneralizedNode
{
    Type _type;//类型
    GeneralizedNode* _next;//指向下一节点的指针
    union
    {
        int _value;//一个节点下一节点可能是值节点,也可能是子表节点
        GeneralizedNode* _sublink;
    }; 

    GeneralizedNode(Type type)
        :_next(NULL)
        , _type(type)
    {}
};
时间: 2024-08-04 18:30:34

【数据结构】广义表的默认成员函数、深度、大小、打印的相关文章

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

(继承及其访问限定符)&amp;&amp;(派生类及其默认成员函数)&amp;&amp;(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

C++中的默认成员函数

一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成: 1.default constructor 2.copy constructor Someclass::Someclass(const Someclass &); 3.copy assignment operator Someclass & Someclass::operator=(const Someclass &); 4.destructor 对于C++11,又增加了两个: 5.m

如何禁止C++默认成员函数

如何禁止C++默认成员函数 发表于 2016-03-02   |   分类于 C++  |   阅读次数 17 前言 前几天在一次笔试过程中被问到C++如何设计禁止调用默认构造函数,当时简单的想法是直接将默认构造函数声明为private即可,这样的话对象的确不能直接调用.之后查阅了<Effective C++>之后得到了比较详尽的解释. 了解C++的默认行为 当我们创建空类时,C++默认给我们生成了四种成员函数: 构造函数 析构函数 拷贝构造函数(copy) 重载=的拷贝函数(copy ass

C++6个默认成员函数

问题:C++中的空类,默认情况下会产生哪些类成员函数? 系统默认的缺省构造函数和拷贝构造函数(复制构造函数) 系统默认提供的析构函数. 系统默认的运算符重载函数(拷贝赋值函数):用于同类对象之间的赋值. 系统默认的取值运算:当对类的对象进行取地址(&)时会被调用. 1.构造函数法和析构函数存在的必要性和作用: (1).构造函数的必要性和作用(用构造函数确保初始化): 解决同种类型的不同对象的初始化问题. 保证每个对象的数据成员都有合适的初始值. (2).析构函数的必要性和作用(用析构函数确保清除

数据结构——广义表

定义 Python中的list就是一种广义表,使用起来非常方便.广义表的特点就是能够存储不同类型的元素,也支持嵌套使用,即表中还有表.关于广义表的定义还有几本操作归纳如下: ADT Linear List: 元素组成: 能存储不同元素类型的表结构叫做广义表,支持嵌套操作. 基本操作: InitGList() 创建一个空表 DestoryGList() 销毁一个表 GListLength()  获取表的长度 GListDepth()  获取表的深度 PrintList() 遍历一次表 Insert

数据结构 - 广义表

广义表 什么是广义表呢? (1)广义表是由零个或多个原子或子表组成的有限序列,是线性表的推广 (2) 广义表一般记作:LS=(d1,d2,-,dn) (3)di可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表 广义表概念 (1)当广义表LS非空时,称第一个元素d1为LS的表头(Head),称其余元素组成的子表(d2,-,dn)是LS的表尾(Tail) (2)非空广义表可唯一分解成表头和表尾:反过来,由表头和表尾可唯一组成一个广义表 (3)广义表括号的层数定义为广义表的深度 广义表特

数据结构广义表实验

一.问题描述: 1.题目内容:识别广义表的“头”或“尾”的演示 写一个程序,建立广义表的存储结构,演示在此存储结构上实现的广义表求头/求尾操作序列的结果. 2.基本要求 (1)设一个广义表允许分多行输入,其中可以任意地输入空格符,原子是不限长的仅字母或数字组成的串. (2)广义表采用如教材中结点的存储结构,试按表头和表尾的分解方法编写建立广义表存储结构的算法. (3)对已建立存储结构的广义表施行操作,操作序列为一个仅由“t“或”h”组成的串,它可以是空串(此时印出整个广义表),自左至右施行各操作

类的六个默认成员函数-&gt;构造函数

在C++中当你创建一个空类时,编译器会默认声明一个default构造函数,copy构造函数,一个copy assignment操作符,一个析构函数.注意,编译器只声明,只有当这些函数被调用时,他们才会被创建. 举个栗子,当你写下 class Empty() {}; 实际上在编译器中为你实现了这样的代码 class Empty { Empty(){} Empty(const Empty& rhs){} ~Empty(){} Empty& operator=(const Empty&