假设有两个集合A和B分别用两个线性表LA和LB表示即.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:23 大小:213KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

假设有两个集合A和B分别用两个线性表LA和LB表示即.ppt

假设有两个集合A和B分别用两个线性表LA和LB表示即.ppt

预览

免费试读已结束,剩余 13 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。1.从线性表LB中依次察看每个数据元素;x=Get(Lb,i);if(!Locate(La,x))Insert(La,++La_len,x);静态链表结构利用数组定义,运算过程中存储空间大小不变循环链表(CircularList)循环链表是单链表的变形。循环链表最后一个结点的link指针不为0(NULL),而是指向了表的前端。为简化操作,在循环链表中往往加入表头结点。循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。循环链表的示例带表头结点的循环链表用循环链表求解约瑟夫问题例如n=8m=3约瑟夫问题的解法#include<iostream.h>#include“CircList.h”voidJosephus(intn,intm){for(inti=0;i<n-1;i++){//执行n-1次for(intj=0;j<m-1;j++)Next();cout<<“Deleteperson”<<getData()<<endl;//数m-1个人Remove();//删去}}voidmain(){CircList<int>clist;intn,m;cout<<“EntertheNumberofContestants?”;cin>>n>>m;for(inti=1;i<=n;i++)clist.insert(i);//形成约瑟夫环clist.Josephus(n,m);//解决约瑟夫问题}在多项式的链表表示中每个结点增加了一个数据成员link,作为链接指针。优点是:多项式的项数可以动态地增长,不存在存储溢出问题。插入、删除方便,不移动元素。多项式(polynomial)类的链表定义structTerm{intcoef;intexp;voidInit(intc,inte){coef=c;exp=e;}};classPolynomial{List<Term>poly;friendPolynomialoperator+(constPolynomial&,constPolynomial&);};多项式链表的相加Polynomialoperator+(constPolynomial&ah,constPolynomial&bh){Term*pa,*pb,*pc,*p;ListIterator<Element>Aiter(ah.poly);ListIterator<Element>Biter(bh.poly);//建立两个多项式对象Aiter、Biterpa=pc=Aiter.First();//pa检测指针pb=p=Biter.First();//pb检测指针pa=Aiter.Next();pb=Biter.Next;//pa,pb越过表头结点deletep;while(Aiter.NotNull()&&Biter.NotNull())switch(compare(pa→exp,pb→exp)){case'=':pa→coef=pa→coef+pb→coef;p=pb;pb=Biter.Next();deletep;if(!pa→coef){p=pa;pa=Aiter.Next();deletep;}else{pc→link=pa;pc=pa;pa=Aiter.Next();}break;case‘>':pc→next=pb;pc=pb;pb=Biter.Next();break;case‘<':pc→next=pa;pc=pa;pa=Aiter.Next();break;}if(Aiter.NotNull())pc→next=pa;elsepc→next=pb;}双向链表(DoublyLinkedList)结点指向p==p→lLink→rLink==p→rLink→lLink顺序表与链表的比较顺序表与链表的比较线性表小结循环链表:循环链表(CircularLinkedList)是将单链表的表中最后一个结点指针指向链表的表头结点,整个链表形成一个环,从表中任一结点出发都可找到表中其他的结点。双向链表:双向链表中,在每一个结点除了数据域外,还包含两个指针域,一个指针(next)指向该结点的后继结点,另一个指针(prior)指向它的前驱结点。除上述基本概念以外,学生还应该了解:线性表的基本操作(初始化、插入、删除、存取、复制、合并)、顺序存储结构的