数据结构:广义表转置

问题描述

设计算法,将指定的广义表的内容原地逆置。例如:若广义表GL为[1, [2, 3], 4, [5, [6, 7], 8], 9],逆置后GL为 [9, [8, [7, 6], 5], 4, [3, 2], 1] 。

基本思路

如题,一眼就能看出问题具有递归性,因此采用递归来求解,代码就非常简单了。

Python实现

#encoding = utf8

def reverse_table(table):
    ‘‘‘
    递归
    ‘‘‘
    if not isinstance(table,list) or len(table)==0: #元素不是list 或者 list的长度为0则返回
        return

    for sub_table in table:
        reverse_table(sub_table)

    table_len = len(table)
    for i in range(table_len//2):
        table[i], table[table_len-i-1] = table[table_len-i-1], table[i] #switch

if __name__ == "__main__":
    table=[1, [2, 3], 4, [5, [6, 7], 8], 9]
    reverse_table(table)
    print(table)

原文地址:https://www.cnblogs.com/walter-xh/p/10035697.html

时间: 2024-07-31 04:19:58

数据结构:广义表转置的相关文章

数据结构——广义表

定义 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”组成的串,它可以是空串(此时印出整个广义表),自左至右施行各操作

C++ 数据结构 广义表

GeneralList-广义表 广义表是非线性的结构,是线性表的一种扩展,是有n个元素组成有限序列. 广义表的定义是递归的,因为在表的描述中又得到了表,允许表中有表. <1> A = () <2> B = (a,b) <3> C = (a,b,(c,d)) <4> D = (a,b,(c,d),(e,(f),h)) <5> E = (((),())) #define _CRT_SECURE_NO_WARNINGS 1 #define _CRT_S

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

数据结构与算法系列研究四——数组和广义表

稀疏矩阵的十字链表实现和转置 一.数组和广义表的定义 数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表.           二维数组的逻辑结构可形式地描述为:           2_ARRAY(D,R)              其中 D={aij} | i=0,1,...,b1-1; j=0,1,...,b2-1;aij∈D0}              R={Row,Col}              Row={<aij,ai,j+1>|0<=i<=b1-1;

5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 三元组顺序表(稀疏矩阵) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试数据下

数据结构 - 数组、矩阵、广义表存储

数组的定义 数组的定义 数组是下标index 和值value 组成的序对的集合. 在数组中,每个有定义的下标都与一个值对应,这个值称做数组元素. 每个序对形如: (index,value) 数组的顺序表示和实现 由于计算机的内存结构是一维的,因此用一维内存来表示多维数组,就必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放在存储器中. 一般都是采用顺序存储的方法来表示数组 一维数组的顺序表示 设第一个数组元素a[0]的存储地址是loc(a[0]),若已知每个数组元素占k个存储单元,则下

数据结构22:数组和广义表

本章主要介绍了数组和广义表的相关知识.数组章节,重点理解矩阵压缩存储的方式,在此基础上,学习矩阵的转置.乘法.和加法运算的实现:学习广义表时重点理解用递归的思想求广义表的深度和复制广义表. 本章内容: 1. 数据结构之多维数组 2. 矩阵压缩存储(十字链表.三元组顺序表.行逻辑 3. 矩阵转置算法及代码实现(三元组顺序表) 4. 矩阵乘法(行逻辑链接的顺序表)及代码实现 5. 矩阵加法(基于十字链表)及C语言代码实现 6. 广义表及M元多项式的C语言代码实现 7. 广义表的长度和深度 8. 广义