广义表和数组

一、前言

    由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。因此采用顺序存储结构标示数组是自然的事情了

二、二维数组的存储方式

    1、以行序为主序的存储方式和以列序为主序的存储方式。

        行序存储的存储顺序为a00,a01,a02,a10,a11,a12,a20,a21,a22

        列序存储的存储顺序为a00,a10,a20,a01,a11,a21,a20,a21,a22

    2、以行序为主序的存储结构,假设每一个数据元素占L个存储单元,则二维数组A中任一元素aij的存储位置可由下面这个式子确定:

    LOC(i,j) = LOC(0,0) + (b2*i+j)*L;

 

    其中LOC(0,0)是数组的其实位置,也称为基地址或者基址。

三、广义表

     1、广义表是线性表的推广,也有人称其为列表。

     2、广义表一般记做:LS = (a1,a2,a3,…..,an);

         其中,LS是广义表的名称,n是它的长度。再线性表的定义中,ai只是限于单个元素。而再广义表中ai可以是党元素,也可以是广义表,分别称为广义表LS的原子和子表。习惯上,用大写字母表示广义表的名称,小写字母表示原子。

     当广义表LS非空时,称第一个元素a1为LS的表头(Head),称其余元素组成的表(a2,a3,......an)是LS的表尾(Tail)。

     

上边的5个是一些广义表的例子。

     3、重要结论:

          ️、列表的元素可以是子表,而子表的元素还可以是子表。。。。。

          ️、列表可为其他列表所共享。

          ️、列表可以是一个递归的表,即列表其可以是其本身。

     4、任何一个非空列表其表头可能是原子,也可能是列表,其表尾必定为列表。

          例如GetHead(B,C) = B,GetTail(B,C) = (C)。

     5、列表()和(())不一样,前者为空表,长度为0;后者长度为1,可分解得到表头、表尾均为空表()。

     6、广义表的深度

          广义表的深度定义为广义表中括弧的重数,是广义表的一种量度。

          空表的深度为1.因为有一个括弧

时间: 2024-10-31 12:06:22

广义表和数组的相关文章

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

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

数据结构之自建算法库——广义表

本文针对数据结构基础系列网络课程(5):数组与广义表中第6课时广义表的存储结构及基本运算的实现. 广义算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:glist.h,包含定义广义表数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef GLIST_H_INCLUDED #define GLIST_H_INCLUDED typedef char ElemType; typedef struct lnode { int tag; //节点类型标识 union { ElemTyp

数据结构教程 第二十课 广义表

教学目的: 广义表的定义及存储结构 教学重点: 广义表的操作及意义 教学难点: 广义表存储结构 授课内容: 一.广义表的定义 广义表是线性表的推广,其表中的元素可以是另一个广义表,或其自身. 广义表的定义: ADT GList{ 数据对象:D={i=1,2,...,n>=0;ei(-AtomSet或ei(-GList, AtomSet为某个数据对象} 数据关系:R1={<ei-1,ei>|ei-1,ei(-D,2=<i<=n} 基本操作: InitGlist(&L);

数据结构的广义表,课本上GetHead((B,C))=B,为什么?

问题描述 数据结构的广义表,课本上GetHead((B,C))=B,为什么? 数据结构的广义表,课本上GetHead((B,C))=B,为什么?可网上的题为什么都做成 GetHead((B,C))=(B,C)呢,弄不明白,求大神指导 解决方案 GetHead((B,C))=B 这是对的 GetHead((B,C))=(B,C) 这个在哪里看来的 解决方案二: 哦,我知道了, GetHead(B,C)=B GetHead((B,C))=(B,C) 解决方案三: 解决方案四: 可课本上明明写着Get

应用-广义表和链表在acm中的重要性

问题描述 广义表和链表在acm中的重要性 数据结构课中学习了广义表,好奇其在实际应用编程中的应用 特别是在acm 解决方案 广义表侧重于阐述一种递归的数据结构的概念,这种概念对于诸如分治法.分区.矩阵运算等等都很有用,而链表则是构造各种更复杂数据结构,比如队列.堆栈.向量.树.图.环等等的基础.

广义表的创建和遍历

#include<iostream> #include<string> #include<cstring> #include<cstdlib> #include<list> #include<map> using namespace std; class GLNode{ public: int tag; string node; class { public: GLNode *hp, *tp; } ptr; }; typedef GL

javascript实现数据结构:广义表

原文:javascript实现数据结构:广义表  广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作:      LS = (a1, a2, ..., an) LS是广义表的名称,n是它的长度,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表.习惯上,用大写字母表示广义表的名称,小写字母表示原子.当广义表LS非空时,称第一个元素a1为LS的表头,称其余元素组成的表(a2, a3, ..., an)是LS的表尾.   下面列举

c++-C++编写一个程序,输入一个广义表,对广义表遍历并且计算广义表的个数。

问题描述 C++编写一个程序,输入一个广义表,对广义表遍历并且计算广义表的个数. C++编写一个程序,输入一个广义表,对广义表遍历并且计算广义表的个数. 解决方案 http://blog.csdn.net/jack_wong2010/article/details/6910200

求求老师们帮帮忙,请用面向对象方法设计并实现顺序表(数组)结构。

问题描述 我刚学java,老师留的大作业是用面向对象方法设计并实现顺序表(数组)结构,包括:插入.删除.修改.访问(返回第i位置上的值).逆序.求个数.要求健壮性,针对不合理值,给出出错信息,编写测试类进行测试.我实在有些不懂,求求各位老师们帮帮忙另外在网上看的的这个http://www.jb51.net/article/48163.htm现在还要我编写一个测试类,具体怎么做,谁能帮帮我.我先谢谢大家. 解决方案 解决方案二:可以百度,或看JAVAjava.util.ArrayList源码解决方