2022年2022年链表的建立、合并与拆分C++ .pdf
《2022年2022年链表的建立、合并与拆分C++ .pdf》由会员分享,可在线阅读,更多相关《2022年2022年链表的建立、合并与拆分C++ .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 2 链表的建立、合并与拆分【实验简介】链表是用链接存储的方式来表达线性表,它用指针表示结点间的逻辑关系,链表适用于插入或删除频繁,存储空间需求不定的情形。【实验内容】定义一个链表存储的线性表,除已给出的表元素插入、删除、查找等基本操作外,再提供表的合并、拆分和逆置等操作。在应用程序中建立两个整型的单链表对象A和B,应用线性表的基本操作对表的实例对象进行操作测试。1. 设线性链表A=(a1,a2, ,am),,B=(b1,b2,bn),按下列规则合并A,B 为线性表C的算法,即使得C = (a1,b1, ,am,bm, b (m+1), ,bn) 当 mn C 表利用 A 表和 B 表中的结
2、点空间构成。2. 将 C 表原地逆置。3. 将 C 表的中偶数和奇数分别链接为两个循环链表D 和 E。说明:每一次合并、拆分和逆置等操作的结果均要输出。【主要代码】#include #include class List; struct LinkNode /定义一个结点,有数据域和指针域 int data; LinkNode * link; LinkNode(LinkNode *ptr=NULL)/构造函数link=ptr; LinkNode(const int & item,LinkNode *ptr=NULL) /构造函数data=item;link=ptr; ; class List/线
3、性链表类 protected: LinkNode *first; public: List()first=new LinkNode();/构造函数List(const int &x)first=new LinkNode(x);/带一个整型参数的构造函数List(List & L);/复制构造函数List jishu(List &L);/存放数据为奇数的线性链表函数List oushu(List &L);/存放数据为偶数的线性链表函数void makeEmpty(); /将线性链表置空List()makeEmpty();/析构函数void setData(int i,int &x);/给线性链表
4、的第i个结点赋值 xbool getData(int i,int &x);/获取线性链表的第i个结点的值 ,并把他存储在变量x里LinkNode *Locate(int i);/定位线性链表的第i个结点 ,并返回该结点的指针LinkNode *getHead()constreturn first;/获取线性链表的头指针int Length()const /求线性链表的长度 LinkNode *p=first-link;int count=0; while(p!=NULL) p=p-link;count+; return count; bool Insert(int i,int &x);/在第
5、i个元素后插入x void input(); /在链表里面输入值。void output(); /输出链表里面的元素。void nizhi(); /将线性链表逆置void fenList(List &a,List &b);/将线性链表拆分为两个链表,其中 a链/表存放原链表中数据域为奇数的结点,b链表存放原链表中数据域为偶数的链表LinkNode *search(); /搜索 x在线性链表中的位置 ,函数返回表项序号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页
6、- - - - - - - - - 2 bool Remove(int &x); /将链表中第 i个结点的元素删除List hebing(List &A,List &B);/合并链表的函数 ,并按照题目要求的顺序合并void xunhuan(); /把一个线性单链表置为循环线性链表; List:List(List &L)/复制构造函数 int value; LinkNode *srcptr=L.getHead(); LinkNode *destptr=first=new LinkNode; while(srcptr-link!=NULL) value=srcptr-link-data; des
7、tptr-link=new LinkNode(value); destptr=destptr-link; srcptr=srcptr-link; destptr-link=NULL; List List:jishu(List &L)/存放数据为奇数的链表 int value; LinkNode *srcptr=L.getHead(); LinkNode *destptr=first=new LinkNode; while(srcptr-link!=NULL) if(srcptr-link-data%2!=0) value=srcptr-link-data; destptr-link=new L
8、inkNode(value); destptr=destptr-link; srcptr=srcptr-link; destptr-link=NULL; return *this; List List:oushu(List &L)/存放数据为偶数的链表 int value; LinkNode *srcptr=L.getHead(); LinkNode *destptr=first=new LinkNode; while(srcptr-link!=NULL) if(srcptr-link-data%2=0) value=srcptr-link-data; destptr-link=new Lin
9、kNode(value); destptr=destptr-link; srcptr=srcptr-link; destptr-link=NULL; return *this; LinkNode *List:Locate(int i) if(i0)return NULL; LinkNode *current=first;int k=0; while(current!=NULL&klink;k+; return current; void List:makeEmpty() LinkNode *q; while(first-link!=NULL) q=first-link; first-link=
10、q-link; delete q; void List:setData(int i,int &x) if(idata=x; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 3 bool List:getData(int i,int &x) if(idata;return true; bool List:Insert(int i,int &x)/线性链表的插入函数 LinkNode *current=Locate(i); if(c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年链表的建立、合并与拆分C+ 2022 年链表 建立 合并 拆分 C+
限制150内