有极速快乐十分吗|极速快乐十分走势图|

第02话:线性表的抽象数据类型ADT定义

线性表有哪些基本操作?
服务器君一?#19981;?#36153;了168.159 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
  • 我们现在开始重新学习线性表,先贴一下关于线性表需要学习的内容吧。

前面我们已经给了线性表的定义,现在我们来分析一下,线性表应该有一些什么样的操作呢?然后再定义线性表的ADT

  • 还是拿伍迷老师的精彩例子:

创建与初始化:老师为了让小朋友有秩序地出入,所以就考虑给他们排一个队,并且是长期使用的顺序,这个考虑和安排的过程其实就是一个线性表的创建和初始化过程。

置空:一开始没经验,把小朋友排好队后,发现有的高有的矮,?#28216;?#24456;难看,于是就让小朋友解散重新排——这是一个线性表重置为空表的操作。

获取元素:排好了队,我们随时可以叫出?#28216;?#26576;一位置的小朋友名字及他的具体情况。这种可以根据位序得到数据元素也是一种很重要的线性表操作。

查找:还有什么呢,有时我们想知道,某个小朋友,比如麦兜是否?#21069;?#37324;的小朋友,老师会告诉我说,不是,麦兜在春田花花幼儿园里,不在我们幼儿园。这种査找某个元素是否存在的操作很常用。

表长度:而后有?#39029;?#38382;老师,班里现在到底有多少个小朋友呀,这种获得线性表长度的问题也很普遍。

插入与删除。显然,对于一个幼儿园来说,加入一个新的小朋友到队列中,或因某个小朋友生病,需要移除某个位置,都是很正常的情况。对于一个线性表来说,插入数据和删除数据都是必须的操作。

  • 线性表大概就是上面这些操作了,所以其ADT可以定义为:
ADT 线性表 (List)
Data
Operation  
    void initList(*L);	//创建并初始化一个空线性表,如果成功返回true,修改表传指针   
    bool listEmpty(L);	//判断一个线性表是否为空,不修改表传值   
    void clearList(*L);	//清空一个线性表,成功返回true   
    bool getElem(L,i,*e);	//从某个位置取出元素并赋值给e(i的范围是[1,L.length]),修改e的值所以传递一个指针,成功返回true  
    int locateElem(L,e);	//查找线性表中是否有e,如果有返回它的位置(从1开始),否则返回0表示失败  
    bool listInsert(*L,i,e);	//插入一个元素e在第i个元素之前(i的取值范围是[1,L.length+1]) ,成功返回true   
    bool listDelete(*L,i,*e);	//删除在第i个位置上的元素(i的取值范围是[1,L.length]),删除的元素赋给e,成功返回true  
    int listLength(L);	//返回线性表的元素个数  
endADT

对于不同的应用,线性表的基本操作是不同的,上述操作是最基本的,对于实际问题中涉及的关于线性表的更复杂操作,完全可以用这些基本操作的组合来实现。

比如,要实现两个线性表集合A和B的并集操作。即要使得集合A=AUB。说白了,就?#21069;?#23384;在集合B中但并不存在A中的数据元素插入到A中即可。

仔细分析一下这个操作,发现我们只要循环集合B中的毎个元素,判断当前元素是否存在A中,若不存在,则插入到A中即可。思路应该是很容易想到的。

void unionL(List *la,List lb){  
    int index;  
    int laLength = listLength(*la);	//得到a的长度,需要一个线性表而不是一个地址   
    int lbLength = listLength(lb);}   
    ElemType e;	//声明一个元素   
      
    for(index=1;index<=lbLength;index++){	//遍历lb   
        getElem(lb,index,&e);	//?#26469;?#24471;到lb中的元素   
        if(!locateElem(*la,e)){	//检查是否在la中出现   
            listInsert(la,++laLength,e);	//没有出现则插入?#28216;玻?#21069;自增!   
        }  
    }  
}  
  • 这里,我们对于union操作,用到了前面线性表基本操作ListLength、GetElem、LocateElem、Listlnsert等,可见,对于复杂的个性化的操作,其实就?#21069;?#22522;本操作组合起来实现的。

延伸阅读

此文章所在专题列表如下:

  1. 第01话:线性表的概念与定义
  2. 第02话:线性表的抽象数据类型ADT定义
  3. 第03话:线性表的顺序存储结构
  4. 第04话:线性表的初始化
  5. 第05话:线性表的遍历、插入操作
  6. 第06话:判断线性表是否为空与置空操作
  7. 第07话:线性表的查找操作
  8. 第08话:线性表删除某个元素
  9. 线性表顺序存储的优缺点
  10. 线性表链式存储结构的由来与基本概念
  11. 单链表的?#20998;?#38024;、头结点与首元结点
  12. 单链表的结构体定义与声明
  13. 单链表的初始化
  14. 单链表的插入与遍历操作
  15. 单链表的删除某个元素的操作
  16. 获取单链表中的指定位置的元素
  17. 查找某数在单链表中的位置
  18. 用头插法实现单链表整表创建
  19. 用尾插法实现单链表整表创建
  20. 将单链表重置为空表
  21. 单链表反转/逆序的两种方法
  22. 单链表反转/逆序的第三种方法
  23. 求单链表倒数第N个数
  24. 用标尺法快速找到单链表的中间结点
  25. 如何判断链表是否有环的存在
  26. 单链表建环,无环链表变有环
  27. 删除单链表中的重复元素

本文地址:http://www.bavugt.tw/librarys/veda/detail/2199,?#38431;?#35775;问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.bavugt.tw/librarys/veda/detail/2199

如果你认为这篇文章值得更多人阅读,?#38431;?#20351;用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读?#35805;?#26412;计算机著作吧,少年

很多人觉得自己?#38469;?#36827;步很慢,学习效?#23454;停?#25105;觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不?#20302;常?#22240;为在特定领域有一个足够量的知?#35835;?足够良好的知识结构,?#20302;?#21270;以后就足以应对大量未曾遇到过的问题。

奉?#30333;?#23398;者:构建特定领域的知识结构体系的路径?#24615;?#20063;没有比学习该专业的专业课程更好的了。如果我的知识结构体?#24213;?#20197;?#20381;?#38754;试官的大部分甚至吞并他的知识结构体系的话,读到他?#26434;?#20013;的一个词我们就已经知道他要表达什么,我们可以让他坐“上位?#21271;?#31455;他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读?#35805;?#26412;计算机著作吧,少年!

《数据结构与算法分析:C++描述(第3版)》 维斯 (Mark Allen Weiss) (作者), 张怀勇 (译者), 等 (译者)

《数据结构与算法分析:C++描述(第3版)》是数据结构和算法分析的经典教?#27169;?#20070;中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、k-d树和配对?#35757;取!?#25968;据结构与算法分析:C++描述(第3版)》适合作为计算机相关专业本科生的数据结构课程和研?#21487;?#31639;法分析课程的教材。本科生的数据结构课程可以使用《数据结构与算法分析:C++描述(第3版)》第1章~第9章,多学时课程还可以讲解第10章;研?#21487;?#31639;法分析课程可以使用第6章~第12章。

更多计算机宝库...

有极速快乐十分吗
广西十一选五推荐号 百家乐网络 17年极速时时彩开奖 承包医院保洁赚钱吗 快乐十分定胆杀号技巧 福彩3d组选尾数 支付宝赚钱红包能用多长时间 秒速时时彩走势图 彩票青海十一选五开奖结果 吃鸡游戏怎么快速降落到地面